在Rails 3活动记录查询中使用WHERE子句

时间:2012-04-19 16:26:28

标签: ruby-on-rails ruby activerecord

我是rails的新手,我正在尝试使用where方法从我的数据表中检索记录。但是,使用它似乎不会返回任何结果。

employee = Employee.where("first_name = ?", "bill")  #doesn't work

employee = Employee.where(:first_name => "bill")  #doesn't work

employee = Employee.find_by_first_name("bill")  #works

我正在通过打印employee.first_name测试结果,就像我说前两个不返回任何内容而第三个返回“bill”。这是怎么回事?

2 个答案:

答案 0 :(得分:8)

前两个将返回一个数组(具有该名称的所有员工)。 Employee.find_by_first_name只返回第一个结果 - Employee.find_all_by_first_name应该返回一个类似前两个查询的数组。

看看这是否符合您的期望:

Employee.where("first_name = ?", "bill").first

(为了完整性,Employee.where实际返回的是一个可链接的范围对象,行为就像一个数组一样)

答案 1 :(得分:1)

运行employee.first_name时前两个会发生什么?在我看来你应该得到一个no方法异常,因为Array没有方法first_name

使用where子句不会自动返回找到的第一个雇员模型对象,它将返回一个ActiveRecord :: Relation,当您尝试访问它时,它将由rails自动评估为数组。 where子句将使用first_name ==“bill”

返回所有员工

find_by_first_name只会返回Employee类的单个实例,即使有多名员工的名称为“bill”。

如果您在运行前两个后尝试employee.first.fist_name,我相信如果数据库中的所有内容都正确并且有一个名字为“账单”的员工,您会发现“账单”