当使用has_many和自定义foreign_key时,我在Rails 3中得到一个未定义的方法错误

时间:2013-02-22 12:14:10

标签: ruby-on-rails-3 activerecord has-many

第一个模型:

class FaqGroup < ActiveRecord::Base
  has_many :faqs, :foreign_key => 'group_id', :order => 'position'

  acts_as_list
end

第二种模式:

class Faq < ActiveRecord::Base
  belongs_to :faq_group, :foreign_key => 'group_id'

  acts_as_list :scope => :faq_group
end

控制器:

def new_faq
  @group = FaqGroup.find(params[:id])

  @faq = @group.faqs.create(question: 'lorem', answer: 'ipsum')

当我在浏览器中加载它时,我收到以下错误:

undefined method `faq_group_id' for #<Faq:0xb56fcde4>

所以,基本上当我尝试创建一个新的关联对象时,foreign_key就会被忽略。如果我放弃自定义:foreign_key一切都很好。

另一个观察是,如果我这样做:

@group = FaqGroup.find(params[:id])
@faqs = @group.faqs

它工作正常,所以只有在创建新的关联对象时才会使用foreign_key时出现问题。

谢谢!

1 个答案:

答案 0 :(得分:1)

检查belongs_to association with the foreign key option

如上所述,

foreign key中的belongs_to -

“指定用于关联的外键。默认情况下,这被认为是带有”_id“后缀的关联的名称。因此定义belongs_to:person关联的类将使用”person_id“作为默认值:foreign_key。同样,belongs_to:favorite_person,:class_name =&gt;“Person”将使用“favorite_person_id”的外键。“

所以在它的上下文中,错误是因为你定义了:

class Faq < ActiveRecord::Base
  belongs_to :faq_group, :foreign_key => 'group_id'

此关联需要faq_group_id作为外键,而不是group_id

错误也是如此 -

undefined method `faq_group_id' for #<Faq:0xb56fcde4>