Каков хороший способ условного запроса цепочки в рельсах?

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

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?

Что не так с тем, что ты делаешь? Я делаю такие вещи все время. Это чисто и легко читается.

mu is too short 27.06.2019 06:16

@muistooshort Я знаю... это не так уж и плохо. Я тоже постоянно так делаю. Однако я вдруг задаюсь вопросом, если я использую метод взрыва для изменения экземпляра модели, который он изменяет сам, даже если он не назначается себе, то почему я не могу сделать с интерфейсом запроса? Итак, у меня есть вопрос. Почему отношение должно назначать себя, чтобы добавить какой-то запрос?

ogelacinyc 27.06.2019 07:20

В вашем подходе нет ничего плохого, вы даже можете пропустить часть == true

Eyeslandic 27.06.2019 11:55
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
3
88
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 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])

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

Другие вопросы по теме