Ruby on Rails: как найти все элементы с хешем, которые содержат определенное значение - PullRequest
2 голосов
/ 26 апреля 2010

Предположим, у меня есть три модели: Student, SchoolClass и DayOfWeek. Существует отношение HABTM между Student и SchoolClass и между SchoolClass и DayOfWeek. Я хотел бы найти все школьные классы, принадлежащие данному ученику, которые встречаются в понедельник.

Теперь я полагаю, что мог бы сделать что-то вроде:

@student = Student.find(:student_id)
@student_classes = @student.school_classes.find(:all)
@student_classes_on_monday = Array.new
@student_classes.each do |student_class|
  if student_class.day_of_week.include?("Monday")
    @student_classes_on_monday << student_class 
  end
end

Есть ли способ выполнить строки 2-8 в одном методе поиска?

1 Ответ

4 голосов
/ 26 апреля 2010

Похоже, вы хотите использовать select:

@student_classes_on_monday = @student_classes.select do |student_class|
  student_class.day_of_the_week.include? "Monday"
end

Выбор вернет все элементы, для которых блок истинен. Таким образом, вы можете просто передать свое состояние как блок и вернуть предметы, которые соответствуют критериям.

Вы также можете использовать ключевое слово «like», чтобы попытаться сопоставить это в запросе вашей базы данных. Я не уверен, на что похожа ваша схема, но что-то вроде этого может помочь вам начать:

@student.school_classes.find(:all, :conditions => ['day_of_week LIKE ?', '%Monday%'])

Я сам немного разбираюсь в синтаксисе этого, поэтому я вытащил этот пример отсюда (и, следовательно, не буду гарантировать, что он полностью корректен): http://railsruby.blogspot.com/2006/08/like-as-condition-to-get-records.html

...