我有一个模型Email_address属于用户。而在我的用户模型中,它表示has_many email_addresses。请看下面的控制台输出:Ruby on rails - where子句在关系上产生'undefined method'错误
irb(main):073:0>
b = EmailAddress.find(2)
EmailAddress Load (0.4ms) SELECT email_addresses.* FROM email_addresses WHERE email_addresses.id = 2 LIMIT 1
=> #EmailAddress id: 2, email: "[email protected]", user_id: 2, created_at: "2013-03-06 02:33:40", updated_at: "2013-03-06 02:33:40"
irb(main):074:0>
b.user
User Load (0.1ms) SELECT users.* FROM users WHERE users.id = 2 LIMIT 1
=> #User id: 2, username: "w", created_at: "2013-03-06 02:33:40", updated_at: "2013-03-06 02:33:40"
irb(main):075:0>
b = EmailAddress.where(:email => "[email protected]")
EmailAddress Load (0.1ms) SELECT email_addresses.* FROM email_addresses WHERE email_addresses.email = [email protected]
=> #EmailAddress id: 1, email: "[email protected]", user_id: 1, created_at: "2013-03-05 07:26:56", updated_at: "2013-03-05 07:26:56"
irb(main):076:0>
b.user
NoMethodError: undefined method user for # from /var/lib/gems/1.8/gems/activerecord-3.2.11/lib/active_record/relation/delegation.rb:45:in `method_missing' from (irb):76
谁能告诉我,为什么当我使用where()
我无法再找到用户,但它的作品,当我使用find()方法?这是非常令人困惑的输出。
'EmailAddress.where(:电子邮件=> “[email protected]”)'产生一个' ActiveRecord ::关系对象。尝试将其更改为EmailAddress.where(:email =>“[email protected]”)。首先' – jvnill 2013-03-06 03:23:13
宾果!谢谢jvnill!这是完美的。 – user985723 2013-03-06 03:26:01
尽量使用“范围”而不是在控制器中使用“where”,因为它使代码更具可读性/可维护性。在这里阅读更多关于范围http://guides.rubyonrails.org/active_record_querying.html#scopes – sameera207 2013-03-06 03:47:35