2

假设我有三个模型:StudentSchoolClassDayOfWeek。和 之间存在 HABTM 关系,Student以及和SchoolClass之间。我想做的是找到周一开会的属于某个学生的所有学校班级。SchoolClassDayOfWeek

现在我想我可以做类似的事情:

@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

有没有办法在一个 find 方法中完成第 2-8 行?

4

1 回答 1

4

看起来你想使用选择:

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

Select 将返回该块为真的所有元素。因此,您可以将您的条件作为块传递并取回符合条件的项目。

您还可以使用“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 回答