我的模型和关联目前设置如下:
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
的操作时,我希望user_id
字段中Version
填写user_id
创建模型的用户的 。现在,当我执行该创建方法时,它被设置为 nil。现在,这是有道理的,我明白为什么它不起作用。我只是不知道如何使这项工作。
我一直在为此挠头,无法弄清楚!你将如何做到这一点?
更新
注意:虽然这行得通,但下面的 Levi 的回答是一个更好的解决方案,这也是我最终选择的
我想通了,但我仍然希望得到有关这是否是解决此问题的最佳方法的反馈。我觉得可能有一个内置的rails方法可以做到这一点,我错过了
这是我更新的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