Ruby on rails 3 .在哪里vs可以找到。ActiveRecord::关系命名错误

Ruby on rails 3 .在哪里vs可以找到。ActiveRecord::关系命名错误,ruby-on-rails-3,activerecord,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.find_by_email(email_string) 我可以看到我的更改被持久化,并

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

当我这样做的时候

u = User.where("email=?", email_string)
u.name = "new name" 
不管用,我一直在找

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

u = User.find_by_email(email_string)
我可以看到我的更改被持久化,并且没有抛出错误


那么我错过了什么呢。是返回只读对象还是什么

。where实际上是一个作用域,实际上返回一个用户集合,而不是单个用户。您可以使用获取第一个匹配的用户(如通过电子邮件查找)

此外,还可以使用返回集合

User.find_all_by_email(email_string)

我希望这能有所帮助。

完全没有这项技术的经验,但我的猜测是,
where
正在返回一个集合/数组,其中as
find\u by\u email
返回一条记录?我知道这个问题是专门针对rails-3的,但对于任何在rails-4上尝试这项技术的人来说,动态查找程序
find\u all\u by_uu…
已被弃用,新语法为
find\u by email:“email\u string”
User.where('email = ?', email_string).first
User.find_all_by_email(email_string)