覆盖嵌套模型质量分配的属性

时间:2009-12-21 16:42:48

标签: ruby-on-rails activerecord

我目前正在我的一个模型上使用嵌套模型质量分配。它是一种享受,但是,我希望能够确保创建的任何嵌套模型“属于”同一用户。

我设法通过使用alias方法链接来实现这个:

  def contact_attributes_with_user_id=(attributes)
    self.contact_attributes_without_user_id = attributes.merge( "user_id" => user_id )
  end
  alias_method_chain :contact_attributes=, :user_id

现在这样可以正常工作,但这意味着我无法再对联系人的user_id进行属性保护 - 这可能会在将来轻易将某人赶出去。

有人能提出更好的方法吗?

1 个答案:

答案 0 :(得分:0)

如果您向before_save模型添加Contact挂钩,如下所示:

belongs_to :parent
validates_presence_of :parent_id

before_save :assign_user_id

private
def assign_user_id
  self.user_id = parent.user_id
end

这样,您的联系人'user_ids将遵循父模型,您根本不必担心分配(您可以摆脱alias_method_chain)。