2010-04-25 86 views
2

假設我有三個模型:StudentSchoolClassDayOfWeek。在StudentSchoolClass之間以及在SchoolClassDayOfWeek之間存在HABTM關係。我想要做的是找到屬於週一見面的給定學生的所有學校課程。Ruby on Rails:如何查找包含特定值的散列的所有項目

現在,我想我可以做這樣的事情:

@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

貌似要使用選擇:

@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

+0

這更優雅,但我真正喜歡的是find_all_by方法,它只返回尋找的類。我會更新我的問題,具體到這一點。 – kingjeffrey 2010-04-25 22:09:33

+0

試圖給出一個查找查詢,它可以做你想做的事。不知道它是否正是你需要的。 – Pete 2010-04-25 22:24:55

+0

謝謝皮特。如果你的第二位不適合我,第一位會。 – kingjeffrey 2010-04-25 22:57:59

相關問題