我有一个接受嵌套参数的模型:
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"]
的方式检索参数,但这种结果是零。我怎么可以访问参数?
答案 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
这里可能有更好的方法来比较作者姓名,但这是解释和保持范例的最明确方式。