Что такое хороший способ условного запроса цепочки в рельсах? - PullRequest
1 голос
/ 27 июня 2019

Если мне нужно сделать запрос условно, я пытаюсь сделать так:

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?

1 Ответ

5 голосов
/ 27 июня 2019

Вы можете использовать области действия модели:

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])

Если параметр присутствует, вы получаете статьи с областями действия, если такого параметра нет - выполучить все статьи

...