2016-02-16 29 views
1

有没有办法在关联中使用两个值来限制数据集而不是仅限一个?如何在has_many关联的作用域中使用模型值

我有一个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 

会从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

你能指望什么'self.another_id'返回?你是否意识到,在这种情况下,“自我”就是阶级? –

+0

@AndreyDeineko:应该是来自'Foo'模型的值。我知道这是行不通的,我把它作为我尝试过的一个例子,并用伪代码来说明我想实现的目标。 – Smar

+0

Foo模型的价值是模糊的。是类属性还是模型的表列? –

回答

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 
+0

为什么'has_many'不能像我期望的那样工作,我不知道,我真的不知道我是否应该去打开一个关于这个上游的功能请求。在内部范围被包裹起来,以至于我无法以任何方式将数据从模型泄漏到范围,所以我需要做一些非常脆弱的猴子补丁,所以我现在将使用它来避免它。 – Smar

+0

这也不完全回答我的问题,所以我不知道我是否应该接受这个答案。意见? – Smar

相关问题