0
はこのように私は(基本的に)見える三つのモデルを持っていると言う:Railsで特定のフィールドが更新されたときに、高度なロジックを実行するにはどうすればよいですか?
class User < ActiveRecord::Base
has_many :projects
has_many :deliverables
end
class Project < ActiveRecord::Base
belongs_to :user
has_many :deliverables
end
class Deliverable < ActiveRecord::Base
belongs_to :user
belongs_to :project
end
は今、私は以下のことが起こるしたいと言う:project
は別のuser
から転送されたときに、すべての関連するdeliverables
が転送されますそれと一緒に。そうですね、
project = Project.find(some_criteria)
deliverables = project.deliverables
project.user_id = new_user_id
deliverables.each do |d|
d.user_id = new_user_id
end
ここで説明した内容を自動化する方法はありますか?私はいつももちろん(transfer_user
のような)方法にそれを入れてもいいですが、user_id
が新しい値に設定されると自動的にそれが起こることを好みます。
理由だけではなく、ユーザーにhas_manyを削除しない:成果を?プロジェクトからユーザーの成果物を取得することができます(例: 'user.project.deliverables')。次に転送する必要はありません。新しいプロジェクトユーザーは、すべての成果物を自動的に継承します。 –
@マーク:そうです。実際には、私が実際に作業しているコードに現実的に対応していない、実践的な例でした。私は悪い例を含めることをお詫びします。私が幸いなことに、Kangの答えは、私が扱っている実際のシナリオ(モデル間の関連性は、あなたが提案した解決策を可能にするためにきれいにはうまくいかない場合)に対処しています。 –