我是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”。这是怎么回事?
答案 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
,我相信如果数据库中的所有内容都正确并且有一个名字为“账单”的员工,您会发现“账单”