ruby-on-rails - 如何检查范围 rails 中是否存在参数

标签 ruby-on-rails activerecord scope

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_timeend_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/

相关文章:

ruby-on-rails - Rails rake 'Don' t 知道如何构建任务'

sql - 优化困难查询(可能使用 squeel)

ruby-on-rails - Rails 获取序列化模型记录

c++ - 与范围有关的局部变量定义,C++

ruby-on-rails - 使用 Action 电缆时如何使状态保持一致

ruby-on-rails - 无法在 Ubuntu 上使用 ruby​​ 2.2.3 安装 json gem

ruby-on-rails - 用 :if 指定两个条件

javascript - Javascript 中存在哪些类型的作用域?

javascript - 尝试保持输入参数不变

ruby-on-rails - SQLite3安装问题