如何在has_many关联的范围

时间:2016-02-16 13:19:02

标签: ruby activerecord

有没有办法在关联中使用两个值来限制数据集而不是只限一个?

我在模型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) }的内容,但这只适用于像普通类方法一样使用的范围。

1 个答案:

答案 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