У меня есть модель материалов, которая имеет форму поиска. Действие поиска выглядит как это:Как выполнить поиск с помощью действий, связанных с использованием условий
def search
conditions = {}
conditions[:version] = 'master'
conditions[:status] = 'shared'
conditions[:targ_lang] = params[:targ_lang] unless params[:targ_lang].blank?
@results = Material.find(:all, :conditions => conditions)
end
Я добавил действия-как-taggable камня и она отлично работает, чтобы сохранить тег, но у меня возникают проблемы при добавлении его в форме поиска. В документации говорится, что найти материалы с тегами вы можете использовать этот код:
Material.tagged_with(["awesome", "cool"], :match_all => true)
Но я не знаю, как добавить это условие к условиям.
Update
@results = Material.where(conditions) && Material.tagged_with(params[:tag_list])
Это работает при условии теги используются, но он не работает, если список тегов пуст, поэтому мне нужно условие, как и в других условиях, указанных выше, что Material.tagged_with .. . часть нужна только в том случае, если поле не пустое.
Update 2 - плохое решение
Это работает, но это не очень элегантно это?
if params[:tag_list].blank?
@results = Material.where(conditions)
else
@results = Material.tagged_with(params[:tag_list]).where(conditions)
end
Это работает, но проблема в том, что он не учитывает пустое поле для тегов. Поэтому, если нет тегов, результатов нет. Необходимо, чтобы теги были просто другим условием. – Finnjon
Хм, я понял вашу проблему сейчас. Я только что обновил ответ с некоторыми догадками. Возможно, это может указывать на правильное направление. – MurifoX