1

最初のモデル:

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

  acts_as_list
end

2 番目のモデル:

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 として使用します。同様に、begs_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 に答える