has_many与两个外键的关系

时间:2015-03-04 00:22:59

标签: ruby-on-rails-4

我有一种关系,我试图引用两个不同的外键。请原谅这里的蹩脚例子,但我想做类似以下的事情:

class Account
  has_many :orders, 
    -> { where('orders.account_id IS NULL OR orders.account_id = ?', self.id ) },
    primary_key: :user_id, foreign_key: :user_id
end

然而,where子句中的动态值不正确,抛出了一个' NoMethodError:undefined方法`id'对于ActiveRecord_Relation'。

有关如何在where子句中引用父记录的任何想法吗?

2 个答案:

答案 0 :(得分:0)

您没有要拨打.id的记录。我想这就是你要找的东西:

class Account
  has_many :orders, 
    -> { where('orders.account_id IS NULL OR orders.account_id = accounts.id') },
    primary_key: :user_id, foreign_key: :user_id
end

答案 1 :(得分:0)

我相信我刚刚遇到了答案。通过为lambda提供属性,rails将提供记录。

class Account
  has_many :orders, 
    ->(record) { where('orders.account_id IS NULL OR orders.account_id = ?', record.id ) },
    primary_key: :user_id, foreign_key: :user_id
end