2016-02-16 24 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

相關問題