scope :created_after, ->(start_time,end_time) { where("start_time > ? and end_time <?", start_time,end_time) }
我想添加 if 条件,如果开始时间存在,则仅 start_time
查询运行,如果 end_time
则其查询运行
最佳答案
我认为 created_after
是您想要对 created_after
范围执行的操作的更好名称。
您可以创建两个辅助作用域来使用 start_time
和 end_time
列过滤结果。
scope :created_after, ->(start_time) do
where("start_time > ?", start_time)
end
scope :created_before, ->(end_time) do
where("end_time < ?", end_time)
end
然后你可以按照你想要的方式组合它们:
scope :created_between, ->(start_time, end_time) do
query = self.all
query = query.created_after(start_time) if start_time
query = query.created_before(end_time) if end_time
query
end
如果您执行查询,为任何范围参数提供nil
,它将忽略它们。例如:created_ Between(nil, nil)
将不会产生额外的查询。
关于ruby-on-rails - 如何检查范围 rails 中是否存在参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49315019/