0

has_many リビジョンのモデル記事があります。リビジョンには、記事に関するすべての情報を格納するさまざまな列があります。Article は、現在選択されているリビジョンの主キーである current_revision にも属します。各リビジョンは、作成後に変更されることはありません。

ユーザーが記事を編集するときに、リビジョンにあるすべてのフィールドを表示するフォームを表示し、current_revision からの情報を事前入力したいと考えています。これは簡単ですが、ユーザーが保存するときに、各フィールドを current_revision の値と比較したいと考えています。すべてのフィールドが同じである場合は、何もせずにフォーム ポストを破棄します。ただし、フィールドのいずれかが異なる場合は、以前のリビジョンに書き込むのではなく、新しいリビジョンを作成したいと考えています。

リビジョンの各フィールドのテストを手動でハードコーディングする以外に、フィールドが変更されたかどうかを検出するにはどうすればよいですか?

4

1 に答える 1

2

Active Record の変更を検出するためのメソッドが組み込まれています。

API には、追跡の変更に関する優れたドキュメントがあります: http://ar.rubyonrails.org/classes/ActiveRecord/Dirty.html

あなたの場合、記事で変更されたフィールドを検出し、そこから新しいリビジョンを作成するだけです。

次のようなもの:

article= Article.find(id)
article.attributes = params[:article]
if article.changed?  
  //new revision
end
于 2010-01-27T23:24:41.820 に答える