2015-09-27 2 views
0

Я пытаюсь отфильтровать массив совпадающих записей с несколькими условиями и, похоже, не могу понять это, я пробовал много разных вещей и искал все, кроме ничего. .. вот код:Фильтрация массива с ошибкой + условия в рельсах

if @post.last_post? 
    @recommendations = @course.recommendations_for_subscriber(subscriber, category, language).first(3) 
end 

и вспомогательный метод

def recommendations_for_subscriber subscriber, category, language 
    course_ids = subscriber.courses.pluck(:id) 
    recommendations.reject { |c| course_ids.include? c.id } 
end 

, что я пытаюсь сделать, это перейти в категорию и язык как условия только имеющих результаты с теми же условиями, , «.where» не будет работать, потому что он не работает с массивом, и я не могу передать его как дополнение к отказу. Любые идеи были бы оценены и вознаграждены торт, если мы когда-нибудь столкнемся друг с другом!

+0

Что сообщение об ошибке вы получаете? Что это в настоящее время выводит? Кроме того, почему вы передаете 'category' и' language' методу 'рекомендаций_for_subscriber', если эти значения не используются? – DaniG2k

ответ

0

Я думаю, это будет решить вашу проблему:

def recommendations_for_subscriber subscriber, category, language 
    Recommendation.where('courses.id NOT IN(?)', subscriber.courses.pluck(:id)) 
end 
+0

Большое вам спасибо! Это сработало отлично. Хотя сейчас я чувствую себя немного отсталой. Дайте мне знать, если вы когда-нибудь в Стокгольме, и я отплачу вам пирогом! – LessPixels

+0

Рад, что это сработало. У меня наверняка был бы торт от вас, если я когда-нибудь поеду в Стокгольм :) – usmanali

+1

Вы можете исключить фрагмент с 'Рекомендацией.where.not (курсы: {id: subscriber.courses.pluck (: id)}). – ahmacleod