Rails关联触发SQL where子句与'model'。'model_id'而不是'model'。'id'

时间:2016-11-23 17:41:21

标签: mysql ruby-on-rails associations

在我的卡片模型中,我有以下关联:

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

每当我尝试使用它们时,例如在控制台中键入c.sub_cards,我会收到以下错误:

  

ActiveRecord :: StatementInvalid:Mysql2 :: Error:Unknown column   'where子句'中的'cards.card_id':SELECT cards。* FROM cards WHERE   cardscard_id = 237 AND(parent_card_id = 237)

实际上,SQL请求有'cards'.'card_id' = something,如果我引用其他工作关联,它应该是'cards'.'id' = something。 问题是我无法找到这种语法的来源。

有人遇到过这个问题吗?

提前感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

您可以通过传递:foreign_key => "some_attribute_id"来指定哪个属性是关系的外键。希望这可以帮助。祝你好运!

编辑:

不知道这是否适合你,但我会写得有点像这样:

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

我认为你可以尝试一下,或接近它。祝你好运!