.where vs find。 ActiveRecord :: Relation NoMethodError

时间:2011-09-16 09:40:21

标签: ruby-on-rails-3 activerecord

我是rails的新手,这似乎很明显,但找不到答案。

当我做的时候

u = User.where("email=?", email_string)
u.name = "new name" 

无法正常工作

NoMethodError: undefined method `name=' for #<ActiveRecord::Relation:0x1049c2890> 

但如果我改变

u = User.where("email=?", email_string)

u = User.find_by_email(email_string)

我可以看到我的更改被持久化并且没有抛出任何错误。

所以我错过了什么。是 .where 返回一个只读对象还是什么?

1 个答案:

答案 0 :(得分:17)

.where实际上是一个范围,实际上返回的是用户集合而不是单个集合。您可以使用

获取第一个匹配的用户(如.find_by_email)
User.where('email = ?', email_string).first

此外,您可以使用

返回一个集合
User.find_all_by_email(email_string)

我希望这会有所帮助。