Если мне нужно запросить условно, я пробую так:
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 Я знаю... это не так уж и плохо. Я тоже постоянно так делаю. Однако я вдруг задаюсь вопросом, если я использую метод взрыва для изменения экземпляра модели, который он изменяет сам, даже если он не назначается себе, то почему я не могу сделать с интерфейсом запроса? Итак, у меня есть вопрос. Почему отношение должно назначать себя, чтобы добавить какой-то запрос?
В вашем подходе нет ничего плохого, вы даже можете пропустить часть == true





Вы можете использовать области модели:
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])
Если параметр присутствует, вы получаете ограниченные статьи, если такого параметра нет - вы получаете все статьи.
Что не так с тем, что ты делаешь? Я делаю такие вещи все время. Это чисто и легко читается.