#ruby-on-rails
#ruby-on-rails
Вопрос:
В моей модели определены следующие методы tutor.rb
def self.fees_search(n)
@profile = Profile.fees_to(n)
if @profile.empty?
return Tutor.none
else
@profile.map do |y|
y.tutor
end
end
end
def self.subject_search(s)
@subject = Subject.find_by_name(s)
unless @subject.nil?
@subject.tutors
end
end
И в моем tutors_controller.rb
случае у меня есть следующее для
def index
@tutor = Tutor.all
@tutor = @tutor.fees_search(params[:fees_search]) if params[:fees_search].present?
@tutor = @tutor.subject_search(params[:subject_search]) if params[:subject_search].present?
end
Оба поиска работают при независимом применении, но когда я пытаюсь выполнить оба, я получаю сообщение об ошибке undefined method
subject_search’ for # now i suppose its because the first method of
fees_search` будет обработан первым? Вот почему я думаю, что получаю эту ошибку. Как мне тогда по-другому закодировать действие моего контроллера? Чтобы принять оба фильтра?
Очень ценю все советы. Спасибо!
Ответ №1:
Попробуйте указать, какие параметры present
,
def index
@tutor = Tutor.all
@tutor_array = []
@tutor_array << @tutor.fees_search(params[:fees_search]) if (params[:fees_search].present?
@tutor_array << @tutor.subject_search(params[:subject_search]) if (params[:subject_search].present?
@tutor_array << @tutor.location_search(params[:location_search]) if (params[:location_search].present?
@tutor_array.each do |tutor|
ids = @tutor.merge(tutor).map(amp;:id)
@tutor = Tutor.where(id: ids)
end
end
Комментарии:
1. Я попробую это, но что, если бы у меня был 3-й или даже 4-й параметр поиска? Скажите, сделал ли я
@tutor = @tutor.location_search
и т. Д. Как мне еще больше расширить эту логику? Потому что, если бы было 3 фильтра, а не 2, я мог бы применить либо 2, либо 3 фильтра одновременно, и это похоже на то, что это приведет к раздуванию кода из-за увеличения комбинации?2. таким же образом вы будете отправлять параметры? будете ли вы вызывать метод на основе параметров?, когда вам нужно применить несколько фильтров?
3. мне очень жаль, но я не совсем понимаю, что вы имеете в виду… как вы думаете, вы могли бы уточнить?
4. когда вам точно нужно применить несколько фильтров?
5. Точно не указано, когда. Это происходит от пользовательского ввода через форму. Вот почему иногда может быть применен только 1 фильтр, иногда может быть применено 3 или 4 фильтра. Прямо сейчас я застрял на том, чтобы заставить 2 работать одновременно