在Rails 3中访问before_add回调中的关联

时间:2013-03-26 15:27:08

标签: ruby-on-rails ruby-on-rails-3 ruby-on-rails-3.2

在Rails 3.2中,我一直在寻找一种方法来遍历before_add回调中对象的关联。

基本上我的用例是:

class User < ActiveRecord::Base
  has_and_belongs_to_many :meetings
end

class Meeting < ActiveRecord::Base
  has_and_belongs_to_many :users
  has_many :comments, :before_add => :set_owner_id
end

class Comment < ActiveRecord::Base
  belongs_to :meeting
end

def set_owner_id(child)
  child.owner_id = <<<THE USER ID for @user >>>
end

我正在用户的上下文中创建评论:

@user.meetings.first.comments.create

如何从before_add回调中遍历关联以发现@user的id?我想在模型级别设置它。我一直在关注proxy_association,但我可能会遗漏一些东西。有什么想法吗?

1 个答案:

答案 0 :(得分:1)

你应该在会议的背景下创建评论,不是吗?无论哪种方式,您都应该在控制器中处理此问题,因为您无法访问模型中的@user。

@comment = Meeting.find(id).comments.create(owner_id: @user, ... )

但如果你坚持自己的方式,那就这样做:

@comment = @user.meetings.first.comments.create(owner_id: @user.id)