2

Student、 、 の3 つのモデルがあるSchoolClassとしDayOfWeekます。StudentSchoolClass、および と の間に HABTM 関係が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

1 つの find メソッドで 2 行目から 8 行目を実行する方法はありますか?

4

1 に答える 1

4

selectを使用したいようです:

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

Selectは、ブロックがtrueであるすべての要素を返します。したがって、条件をブロックとして渡すだけで、基準を満たすアイテムを取り戻すことができます。

'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

于 2010-04-25T22:07:38.047 に答える