代码之家  ›  专栏  ›  技术社区  ›  kingjeffrey

rubyonrails:如何找到包含特定值的散列的所有项

  •  2
  • kingjeffrey  · 技术社区  · 15 年前

    假设我有三个模型: Student 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
    

    有没有一种方法可以用一个find方法完成第2-8行?

    1 回复  |  直到 15 年前
        1
  •  4
  •   Pete    15 年前

    似乎要使用选择:

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

    Select将返回块为真的所有元素。所以你可以通过你的条件作为块,并得到符合条件的项目。

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

    我自己对这个的语法有点生疏,所以我从这里引出这个示例(因此不能保证它是完全正确的): http://railsruby.blogspot.com/2006/08/like-as-condition-to-get-records.html