Rails:在模型层中访问嵌套参数

时间:2013-02-05 14:52:30

标签: ruby-on-rails model callback params

我有一个接受嵌套参数的模型:

class Publication < ActiveRecord::Base
  attr_accessible :authors_attributes, :title

  has_many :authors
  accepts_nested_attributes_for :authors
end

before_create回调中,我想检查是否存在具有相同标题和作者的其他出版物。回调看起来像这样:

def find_duplicate
  Publication.where(self.instance_values["attributes"].except("id", "created_at",
    "updated_at")).each do |publication|
      if publication.author_names.sort == @authors
        return publication
      end
  end
end

问题是,我不知道如何获得@authors。我假设我能以某种方式以类似于self.instance_values["author_attributes"]的方式检索参数,但这种结果是零。我怎么可以访问参数?

1 个答案:

答案 0 :(得分:1)

你应该让'authors'作为使用has_many构建的访问器。因此,您只需使用“authors”或“self.authors”来获取即将创建的(非持久的)作者对象,而不是@authors。尝试类似:

Publication.where(self.instance_values["attributes"].except("id", "created_at",
    "updated_at")).each do |publication|
      if publication.authors.collect{|a| a.name}.sort == self.authors.collect{|a| a.name}.sort
        return publication
      end
  end

这里可能有更好的方法来比较作者姓名,但这是解释和保持范例的最明确方式。