0

Ruby on Rails (3.0) でプロジェクト管理アプリケーションを構築しています。プロジェクト列の更新時にプロジェクトのすべてのタスクを更新する方法を見つけようとしています。これが状況です。

予想どおり、すべてのプロジェクトを /projects/index.html.erb にリストしています。ユーザーがリストをソートすると、ソート可能なリスト ( Ryan Bates チュートリアル から) を使用して project.position フィールドを更新します。

プロジェクト リストが並べ替えproject.positionられると、各並べ替えで列が更新され、そのプロジェクトのすべてのタスクの task.project_position 列も更新したいと考えてbelong_toいます。したがって、task.project_position = project.position です。

これはプロジェクト モデルの after_save を介して行われると推測していますが、完全に間違っている可能性があります。

4

1 に答える 1

1

値を複数回保存しないでください - それは、いくつかの難解なケースを除いてすべてですredundantunnecessary

Ruby/Rails ではdelegate、次のように position メソッドのタスクからプロジェクトに移動できます (Task モデル内):

delegate :position, :to => :project, :prefix => true, :allow_nil => true

これでtask.project_position、プロジェクト内のすべてのタスクでそのデータ要素を複製することなく、2 つの間の関連付けを介して project.position の値を返す which が作成されました。

belongs_to :projectこれはすべて、そのタスク(およびおそらく project ) を前提としていますhas_many :tasks

より詳しい説明。

なんらかの理由で本当に非正規化ルートに行かなければならないと感じた場合は、そうです、after_save がそれを行う場所になります。

于 2011-08-02T21:02:40.963 に答える