Model.where () с несколькими параметрами с проверкой, присутствуют ли они в рельсах - PullRequest
0 голосов
/ 09 мая 2019

Я новичок в Rails.Я начал работать над POC.

Код моего контроллера ниже:

  @xyz = if params[:id].present?
           if params[:mobile_number].present?
             Seeker.where("id = ? and mobile_number = ?" , params[:id], params[:mobile_number])                    
           else                    
             Seeker.where("id = ?", params[:id])
           end
         elsif params[:seekerid].present?
           Seeker.where("mobile_number = ?" , params[:mobile_number])
         else
           Seeker.where(nil);
         end

Но я не думаю, что это хороший подход.Подумайте, если у меня есть много параметров, тогда поставим условие present?, тогда формирование запроса станет сложным.Или я могу сформировать запрос отдельно, а затем поместить его в условие where в качестве переменной экземпляра.

Каков наилучший подход?

Ответы [ 3 ]

4 голосов
/ 09 мая 2019

Вы можете добавлять where операторы постепенно, когда присутствует каждый параметр:

@xyz = Seeker.scoped
@xyz = @xyz.where(id: params[:id]) if params[:id].present?
@xyz = @zyx.where(mobile_number: params[:mobile_number]) if params[:mobile_number].present?

Более чистый подход мог бы заключаться в том, чтобы переместить эту логику в некоторый метод области или класса в модели Seeker.

0 голосов
/ 10 мая 2019

Если вы хотите найти записи, основанные на каждом параметре, и у них есть значение, которое лучше всего использовать, это

params = {id: nil, mobile_number: "98XXXXXX12" }
Seeker.where(params.compact)

compact удалит значение nil из параметров и непосредственно найдет его с помощью существующего параметра.

ПРИМЕЧАНИЕ: удаляет только ноль значение не "" пустая строка

0 голосов
/ 10 мая 2019

Hi I am new to Rails

Если вы используете поиск для небольшого проекта, маленькой базы данных, вы можете использовать scope Руби и взглянуть на ответ arieljuod.Но если вы хотите, чтобы ваша функция поиска была быстрее, глубже, ... вы можете найти некоторые драгоценные камни:

И есть много других удивительных способов использования Ruby on Rails.

Удачного кодирования !!!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...