Добавление критериев LIKE в блок условий Rails - PullRequest
5 голосов
/ 28 апреля 2010

Рассмотрим следующий код, который нужно сгенерировать при поиске AR:

conditions = []
conditions[:age] = params[:age] if params[:age].present?
conditions[:gender] = params[:gender] if params[:gender].present?

Мне нужно добавить еще одно условие, которое является критерием LIKE, для атрибута profile. Как я могу это сделать, поскольку очевидно, что LIKE обычно выполняется через массив, а не хеш-ключ.

Ответы [ 3 ]

5 голосов
/ 28 апреля 2010

Вы можете охватить вашу модель с помощью хеш-условий, а затем выполнить find для области с условиями массива:

YourModel.scoped(:conditions => conditions).all(:conditions => ["profile like ?", profile])
1 голос
/ 28 апреля 2010

Follwing ужасен, но работает

conditions = {} #This should be Hash
conditions[:age] = params[:age] if params[:age].present?
conditions[:gender] = params[:gender] if params[:gender].present?
conditions[:profile] = '%params[:profile]%' if params[:profile].present?

col_str =""  #this is our column names string for conditions array

col_str = "age=:age" if params[:age].present?
col_str+= (col_str.blank?)? "gender=:gender"  :" AND gender=:gender" if params[:gender].present?
col_str +=  (col_str.blank?) 'profile like :profile' : ' AND profile like :profile' if params[:profile].present?

:conditions=>[col_str , conditions]
0 голосов
/ 28 апреля 2010

Когда вы вызываете поиск активной записи, вы сначала отправляете строку условий, а затем хеш со значениями, такими как:

:conditions => [ "age = :age AND gender = :gender AND profile LIKE :profile", conditions ]

таким образом вы можете продолжать делать то, что делаете :) 1004 *

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