2013-06-18 31 views
1

比方說,我已經建立了這個協會:如何將範圍應用於rails中的連接?

class Budget 
    has_many :forfeitures 
    scope :with_forfeitures, ->{ joins(:forfeitures) } 
end 

class Forfeiture 
    belongs_to :budget  
    scope :between, ->(from, to) { where("created_at > ? AND created_at < ?", from, to)} 
end 

現在我可以做到這一點:

Budget.with_forfeitures.where("forfeitures.created_at > ? AND forfeitures.created_at < ?", from_date, to_date) 

但是請注意,我不得不寫我的原始SQL between範圍。

我可以改爲做一些類似Budget.with_forfeitures.between(from_date, to date)但這樣between適用於沒收?如果我不能這樣做,我如何達到相同的結果,而不復制我的between範圍在原始的SQL?

回答

1

我想嘗試寫Budget.joins(:forfeitures).merge(Forfeiture.between(from, to))

所以,merge方法應爲你工作。

我建議你看從railscasts.com episode 215episode 239

+0

尼府,太棒了!雖然'合併'爲我工作,但沒有。 – valachi221

+0

用&移除代碼。不能讓它工作:)也許它已被棄用 –