【问题标题】:What is good way to query chaining conditionally in rails?在rails中有条件地查询链接的好方法是什么?
【发布时间】:2019-06-27 03:33:06
【问题描述】:

如果我需要有条件地查询,我尝试这样的方式:

query = Model.find_something
query = query.where(condition1: true) if condition1 == true
query = query.where(condition2: true) if condition2 == true
query = query.where(condition3: true) if condition3 == true

效果很好。 但是我觉得是重复同样的代码的一种方式,而且看起来不太好。

是否有可能查询不会根据每个条件表达式重新分配给变量?像这样:

query.where!(condition1: true) # But it can not be in rails :)

我最近开始使用 Rails5。

还有什么是实现 Rails5 的最佳方法?

【问题讨论】:

  • 你在做什么有什么问题?我一直在做这种事情。它干净且易于阅读。
  • @muistooshort 我知道......这还不错。我也一直这样做。但是我突然想知道我是否使用 bang 方法来更改模型实例,即使它没有分配给自己,它也会自行更改,那为什么我不能使用查询接口呢?所以我有一个问题。为什么关系必须分配自己来添加一些查询?
  • 你的方法没有问题,你甚至可以跳过== true部分

标签: ruby-on-rails activerecord orm ruby-on-rails-5


【解决方案1】:

您可以使用模型范围:

class Article < ApplicationRecord
  scope :by_title, ->(title) { where(title: title) if title }
  scope :by_author, ->(name) { where(author_name: name) if name }
end

在任何你需要的地方链接作用域:

Article.by_title(params[:title]).by_author(params[:author_name])

如果存在参数,您将获得范围内的文章,如果没有此类参数 - 您将获得所有文章

【讨论】:

    猜你喜欢
    • 2011-11-02
    • 1970-01-01
    • 1970-01-01
    • 2017-11-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多