Добавление ПОДОБНЫЕ критерии к блоку Условий направляющих

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

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

Я должен добавить другое условие, которое является ПОДОБНЫМИ критериями на атрибуте 'профиля'. Как я могу сделать это, поскольку, очевидно, ПОДОБНОЕ обычно делается через массив, не ключ хеша.

5
задан Neil Middleton 28 April 2010 в 09:49
поделиться

3 ответа

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

YourModel.scoped(:conditions => conditions).all(:conditions => ["profile like ?", profile])
5
ответ дан 14 December 2019 в 13:30
поделиться

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

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

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

0
ответ дан 14 December 2019 в 13:30
поделиться

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]
1
ответ дан 14 December 2019 в 13:30
поделиться
Другие вопросы по тегам:

Похожие вопросы: