2012-08-18 26 views
0

条款我是新来的Ruby和具备以下条件:凡在Model.all

students = Student.all(:order => "score DESC", 
      :limit => 5) 

不过,我想提出一个WHERE子句这个很好,但我得到的错误“未知键:其中”。我student表引用一个exam表(t.references :exam),其具有date场,所以我需要做的是这样的:

students = Student.all(:where => "exam.date='01/01/2012'", 
         :order => "score DESC", 
         :limit => 5) 

如何使用where子句中的all方法是exam.date='01/01/2012'正确的吗?

+2

阅读[ROR指南](http://guides.rubyonrails.org/active_record_querying.html)。 – Dean 2012-08-18 17:10:59

回答

5

all方法与参数是预先Rails 3的API,并all(*args)相当于find(:all, *args),更是把:conditions选项:

students = Student.all(:conditions => "exam.date='01/01/2012'", 
         :order => "score DESC", 
         :limit => 5) 

尽管如此,通常优选使用Rails 3的可链式关系方法:

students = Student.where("exam.date='01/01/2012'").order('score DESC').limit(5) 
+0

近乎成功。我得到'没有这样的列:meeting.date'在处理where子句中的引用时,我需要做什么不同吗? – Decrypter 2012-08-18 17:21:58

+1

如果你想引用一个不同的表格,那么你当然必须做一个'includes'或者'join'。无论如何,你必须对“全部”做同样的处理。 – 2012-08-18 17:26:12

1

您应该使用#where方法:

students = Students.where('exam.date = ?', '01/01/2012').all(order: 'score DESC', limit: 5)