2013-09-17 2 views
0

У меня есть модель материалов, которая имеет форму поиска. Действие поиска выглядит как это:Как выполнить поиск с помощью действий, связанных с использованием условий

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 

ответ

0

Этот код не работает для вас?

Material.where(conditions).tagged_with(['awesome', 'cool'], :match_all => true) 

Или обратный порядок:

Material.tagged_with(['awesome', 'cool'], :match_all => true).where(conditions) 

UPDATE

Чтение документации на act-as-taggable-one на GitHub, есть вариант имени :any. Может быть, вы можете попробовать его использовать. У меня нет проекта, который я мог бы провести некоторое тестирование, но, возможно, код вроде:

Material.tagged_with(['awesome', 'cool', '', nil], :any => true).where(conditions) 

Дайте ему попробовать.

+0

Это работает, но проблема в том, что он не учитывает пустое поле для тегов. Поэтому, если нет тегов, результатов нет. Необходимо, чтобы теги были просто другим условием. – Finnjon

+0

Хм, я понял вашу проблему сейчас. Я только что обновил ответ с некоторыми догадками. Возможно, это может указывать на правильное направление. – MurifoX

Смежные вопросы