2016-11-23 5 views
0

を、私は、次の関連付けを持っている:Railsのアソシエーションは「モデル」との句「MODEL_ID」の代わりに「モデル」のSQLをトリガーする「ID」私のカードのモデルで

has_many :sub_cards, ->(obj) { where('parent_card_id = ?', obj.id) }, 
      inverse_of: :parent_card, :class_name => 'Card' 
belongs_to :parent_card, class_name: 'Card', optional: true 

私はそれらを使用しようとするたびに私は私の他の作業団体を参照する場合、それは'cards'.'id' = somethingでなければならないのに対し、

ActiveRecord::StatementInvalid: Mysql2::Error: Unknown column 'cards.card_id' in 'where clause': SELECT cards .* FROM cards WHERE cards . card_id = 237 AND (parent_card_id = 237)

は、実際には、SQL要求は、'cards'.'card_id' = somethingがあります、c.sub_cardsを入力してコンソールで、たとえば、私は次のエラーを取得します。 問題は、この構文がどこから来るのかわかりません。

誰かがこの問題を経験したことがありますか?

ご協力いただきありがとうございます。

答えて

1

:foreign_key => "some_attribute_id"を渡すことで、リレーションの外部キーである属性を指定できます。お役に立てれば。がんばろう!

EDIT:これはあなたのために働く場合

は分からないのですが、私はちょっと、このようにそれを記述します。

has_many :sub_cards, ->(obj) { where('parent_card_id = ?', obj.id) }, 
     inverse_of: :parent_card, :class_name => 'Card', foreign_key: 'parent_card_id' 
belongs_to :parent_card, class_name: 'Card', foreign_key: "parent_card_id", optional: true 

私はあなたがこれを試し、またはそれに近い何かを与えることができると思います。もう一度幸運を祈る!

+0

アトリビュートがアフィリエイト+ _idの名前なので、何も変更されていませんでしたが、あなたの助けに感謝します:) –

+0

@V.Déhayeは私の答えを編集しました。と幸運の仲間! –

+0

残念なことに、belongs_toのためには正しいですが、それはすでにそうですが、それ以外の方法では、parent_card_id属性を調べ、関連を呼び出すオブジェクトを参照するカードを見つけることによって、sub_cardsを見つける必要がありますつまり、このフィールドにアソシエーションを呼び出すオブジェクトのIDを持っています。それでも、もう一度ありがとう! –

関連する問題