有没有办法在关联中使用两个值来限制数据集而不是只限一个?
我在模型has_many
中有一个Nyaw
模型Foo
关联,应使用两个值而不是一个值进行映射。
我尝试了以下代码,但似乎无法undefined method 'another_id' for #<Nyaw::ActiveRecord_Relation:0x00000003ee6f80> (NoMethodError)
错误:
class Foo < ActiveRecord::Base
has_many :nyaws, -> { where "another_id = ?", self.another_id }
end
self.another_id
将是Foo
模型行中的值,我将其称为关联。例如,foo.nyaws
其中foo
是单行。
就SQL而言,这类似于SELECT * FROM foos LEFT JOIN nyaws ON foos.nyaw_id = nyaws.id AND foos.random_id = nyaws.something_else
。所以我基本上希望能够在AND
之后将该部分添加到有人调用关联时完成的每个查询。
似乎有一些建议,但所有官方信息仅提及硬编码值,但没有提及使用定义关联的模型中的值。
最近我发现的是类似scope :with_company_id, lambda {|id| joins(:server).where('server.company_id = ?', id) }
的内容,但这只适用于像普通类方法一样使用的范围。
答案 0 :(得分:0)
我解决了这个问题并创建了简单的方法来模仿has_many
以满足我们的需求,如下所示:
class Foo < ActiveRecord::Base
# Instead of has_many :nyaws, -> { where "another_id = ?", self.another_id }
def nyaws
Nyaw.where([ "id = ? AND another_id = ?", self.nyaw_id, self.another_id ])
end
end