是否可以在Rails中为给定模型创建“空”ActiveRecord Query对象?空对我来说意味着一个条件,包括db中所有可能的行。我想在之后对该查询应用过滤器。
目前我正在使用Booking.where('id > ?', 0)
,但我认为必须有更好的方法,例如Booking.all()
- 但all()
会返回一个数组,而不是ActiveRecord。这是我的代码:
@bookings = Booking.where('id > ?', 0)
if !@day.nil?
@bookings = @bookings.where('day = ?',@day)
end
if @project_id && !@project_id.empty?
@bookings = @bookings.where('project_id = ?', @project_id)
end
感谢您的帮助!
答案 0 :(得分:1)
您可以使用此处讨论的范围方法:http://guides.rubyonrails.org/active_record_querying.html#working-with-scopes
另请注意@project_id.present?
与...相同
@project_id && !@project_id.empty?
答案 1 :(得分:0)
使用unscoped
创建一个空查询,以便您可以构建它。 (scoped
是deprecated)。
@bookings = Booking.unscoped
if !@day.nil?
@bookings = @bookings.where('day = ?',@day)
end
if @project_id && !@project_id.empty?
@bookings = @bookings.where('project_id = ?', @project_id)
end
(顺便说一句,如果没有这个,你也可以用Booking.where(true)
而不是id > 0
检查来初始化它;它更干净,可能比执行真实状态检查更好。但是,没有范围的人还是更好。)