Ruby on rails RubyonRails-where子句在关系上产生“undefined method”错误

Ruby on rails RubyonRails-where子句在关系上产生“undefined method”错误,ruby-on-rails,where,Ruby On Rails,Where,我有一个属于某个用户的电子邮件地址模型。在我的用户模型中,它说它有很多电子邮件地址。考虑以下控制台输出: irbmain:073:0>b=EmailAddress.find2 EmailAddress加载0.4ms从email\u addresses.id=2的email\u addresses中选择email\u addresses.*限制1 =>电子邮件地址id:2,电子邮件:w@example.com,用户id:2,创建时间:2013-03-06 02:33:40,更新时间:2013-03

我有一个属于某个用户的电子邮件地址模型。在我的用户模型中,它说它有很多电子邮件地址。考虑以下控制台输出:

irbmain:073:0>b=EmailAddress.find2

EmailAddress加载0.4ms从email\u addresses.id=2的email\u addresses中选择email\u addresses.*限制1

=>电子邮件地址id:2,电子邮件:w@example.com,用户id:2,创建时间:2013-03-06 02:33:40,更新时间:2013-03-06 02:33:40

IRB主要:074:0>b.user

用户加载0.1ms从users.id=2的用户中选择用户。*限制1

=>用户id:2,用户名:w,创建时间:2013-03-06 02:33:40,更新时间:2013-03-06 02:33:40

irbmain:075:0>b=电子邮件地址。其中:电子邮件=>r@example.com

EmailAddress加载0.1ms从email\u地址中选择email\u地址。*其中email\u地址.email=r@example.com

=>电子邮件地址id:1,电子邮件:r@example.com,用户id:1,创建时间:2013-03-05 07:26:56,更新时间:2013-03-05 07:26:56

irbmain:076:0>b.user

NoMethodError:用户的未定义方法 from/var/lib/gems/1.8/gems/activerecord-3.2.11/lib/active\u record/relation/delegation.rb:45:in'method\u missing' 来自irb:76

有人能告诉我为什么当我使用where时,我无法找到用户,但当我使用find时,它可以工作吗?这是一个非常混乱的输出。

。其中返回一个数组,特别是ActiveRecord::Relation。要选择返回的对象,需要指定哪个对象。在这种情况下,由于您期望一个对象,因此可以执行以下操作:

b = EmailAddress.where(:email => "r@example.com").first

.where返回一个数组,特别是ActiveRecord::Relation。要选择返回的对象,需要指定哪个对象。在这种情况下,由于您期望一个对象,因此可以执行以下操作:

b = EmailAddress.where(:email => "r@example.com").first


EmailAddress.where:email=>r@example.com生成ActiveRecord::关系对象。尝试将其更改为EmailAddress。其中:email=>r@example.com.firstBingo! 谢谢你,jvnill!这很好。尽量使用作用域,而不是使用控制器中的where,因为它使代码更可读/更易于维护。在此处阅读有关作用域的更多信息EmailAddress。其中:email=>r@example.com生成ActiveRecord::关系对象。尝试将其更改为EmailAddress。其中:email=>r@example.com.firstBingo! 谢谢你,jvnill!这很好。尽量使用作用域,而不是使用控制器中的where,因为它使代码更可读/更易于维护。在这里阅读有关作用域的更多信息