2016-08-23 40 views
0

給這些模型軌,獲得紀錄has_and_belongs_to_many有一個以上的值

modelOne 
    has_and_belongs_to_many :model_twos 

modelTwo 
    has_and_belongs_to_many :model_ones 

    field_one: string 

我會怎麼用活動記錄,以獲取了相關modelTwos其中field_one等於"value_1""value_2"

東西都modelOnes像ModelOne.joins(:model_twos).where(model_twos:{field_one: "value_1" AND "value_2"})

回答

0

這確實有點棘手,如果你只想使用ActiveRecord(即不回落到Arel)。

我不是100%肯定它會工作,甚至產生所需的SQL,但我會嘗試這樣的事情:

class ModelOne < ActiveRecord::Base 
    scope :with_model_two_value, -> (val) { joins(:model_twos).where(model_twos: { field_one: val }) } 
end 

ModelOne.with_model_two_value('value_1').merge(ModelOne.with_model_two_value('value_2')) 
+0

它的工作,在SQL最後變成'選擇「model_ones」 * FROM「model_ones」INNER JOIN「model_ones_model_twos」ON「model_ones_model_twos」。「model_one_id」=「model_ones」。「id」INNER JOIN「model_twos」ON「model_twos」。「id」=「model_ones_model_twos」。「model_two_id」WHERE「model_twos」 「field_one」= $ 1 [[「value_1」,「value_2」]]' – Jarfis

+0

沒關係,它沒有工作,我在我的否定測試中有一個錯字 – Jarfis

+0

我很擔心。我猜你可能需要添加一些Arel或SQL。 –

相關問題