如何将范围应用于rails中的连接?

时间:2013-06-18 12:55:54

标签: ruby-on-rails ruby-on-rails-3

让我们说我已建立了这种关联:

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适用于没收吗?如果我不能这样做,如何在不重复原始SQL的between范围的情况下实现相同的结果?

1 个答案:

答案 0 :(得分:1)

我试着写Budget.joins(:forfeitures).merge(Forfeiture.between(from, to))

因此,merge方法适合您。

我建议您从railscasts.com观看episode 215episode 239