1

在 Rails 中是否可以为给定模型创建一个“空”的 ActiveRecord 查询对象?空对我来说意味着一个条件,包括数据库中所有可能的行。之后我想对该查询应用过滤器。

目前我正在使用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

谢谢你的帮助!

4

2 回答 2

1

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

另请注意,@project_id.present?@project_id && !@project_id.empty?

于 2013-04-18T14:42:57.527 回答
0

用于unscoped创建一个空查询,以便您可以在其上进行构建。(scoped弃用)。

@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检查;它更干净,并且可能比做一个真实的条件检查更好。但是,无范围的更好。)

于 2015-12-24T00:06:12.313 回答