現在、モデルと関連付けを次のように設定しています。
class User < ActiveRecord::Base
has_and_belongs_to_many :projects
has_many :versions, :through => :projects
end
class Projects < ActiveRecord::Base
has_many :versions
end
class Version < ActiveRecord::Base
belongs_to :project
attr_accessible :user_id, :project_id
before_create :associate_user
def associate_user
# I have no idea what to do here - in fact, I don't think this is even the right place to do this!
end
end
のようなことをするときは、モデルを作成したユーザーのフィールドに入力してuser.projects.first.versions.create
もらいたいと思います。現在、そのcreateメソッドを実行すると、nilに設定されています。さて、これは理にかなっています、そして私はそれがうまくいかない理由を理解しています。私はこれを機能させる方法を理解できません。user_id
Version
user_id
私はこれに頭を悩ませてきました、そしてそれを理解することができません!これをどのように達成しますか?
アップデート
注:これは機能しましたが、以下のLeviの答えははるかに優れた解決策であり、私が最終的に得たものです。
私はそれを理解しましたが、これがこれを行うための最良の方法であるかどうかについてのフィードバックを希望します。私が欠けているこれを行うためのレールに組み込まれた方法があるかもしれないように感じます
これが私の更新されたVersion
モデルです:
class Version < ActiveRecord::Base
belongs_to :production
attr_accessible :user_id, :production_id
after_create :associate_user
def associate_user
@users = User.all(:include => :productions, :conditions => {"productions_users.production_id" => self.production_id})
@users.each do |user|
user.productions.each do |production|
if production.versions.exists?(self)
@version_user = user
end
end
end
self.user_id = @version_user.id
end
end