1

第一个模型:

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 问题。

谢谢!

4

1 回答 1

1

检查belongs_to 与外键选项的关联。

正如那里提到的,

对于foreign keybelongs_to-

"指定用于关联的外键。默认情况下,这被猜测为带有“_id”后缀的关联名称。因此,定义belongs_to:person关联的类将使用“person_id”作为默认:foreign_key。同样,belongs_to :favorite_person, :class_name => "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>
于 2013-02-22T12:44:45.727 回答