Rails 3:创建一个“空”ActiveRecord查询对象

时间:2013-04-18 14:12:12

标签: ruby-on-rails-3 activerecord

是否可以在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

感谢您的帮助!

2 个答案:

答案 0 :(得分:1)

您可以使用此处讨论的范围方法:http://guides.rubyonrails.org/active_record_querying.html#working-with-scopes

另请注意@project_id.present?与...相同 @project_id && !@project_id.empty?

答案 1 :(得分:0)

使用unscoped创建一个空查询,以便您可以构建它。 (scopeddeprecated)。

@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检查来初始化它;它更干净,可能比执行真实状态检查更好。但是,没有范围的人还是更好。)