2

這是一個非常基本的任務,但我不能爲我的生活找到問題的原因。ActiveRecord'找不到方法'在簡單的一對多關係上發生異常

我正在做一個基本的待辦事項列表附加到用戶帳戶。我正在使用巫術來幫助用戶身份驗證&創建,這看起來工作正常。

問題是這樣的:

當我嘗試調用`@ user.list」以任何方式,我得到下面的異常(這是複製出來的鋼軌控制檯):

@user = User.where(:email => "[email protected]") 
    => [#<User id: 1, email: "[email protected]", crypted_password: "$2a$10$tiLFyiuLGSB.UXElEdaTGerSv6/TZoLL4nVFdCNsv1AW...", salt: "e6275124385b0ea157875bba281c7ae9e3a9858e", created_at: "2011-10-02 05:59:02", updated_at: "2011-10-02 05:59:02", remember_me_token: nil, remember_me_token_expires_at: nil>] 
@user.lists 
NoMethodError: undefined method `lists' for #<ActiveRecord::Relation:0x007f8b6ca89748> 
from /Users/<myaccount>/.rvm/gems/[email protected]/gems/activerecord-  3.1.0/lib/active_record/relation.rb:459:in `method_missing' 
from (irb):4 
from /Users/<myaccount>/.rvm/gems/[email protected]/gems/railties-3.1.0/lib/rails/commands/console.rb:45:in `start' 
from /Users/<myaccount>/.rvm/gems/[email protected]/gems/railties-3.1.0/lib/rails/commands/console.rb:8:in `start' 
from /Users/<myaccount>/.rvm/gems/[email protected]/gems/railties-3.1.0/lib/rails/commands.rb:40:in `<top (required)>' 
from script/rails:6:in `require' 
from script/rails:6:in `<main>' 

我的代碼/ DB設置

的設置很簡單 - 我有一個User模型和List模型。 a List:belongs_to :userUserhas_many :lists。我已經加入user_idlists表以下遷移:

class AddUserIdForeignKeyToLists < ActiveRecord::Migration 
    def change 
    add_column :lists, :user_id, :integer 
    end 
end 

我已經證實,該領域user_id在我的表(MySQL的)確實存在。

User模式是:

class User < ActiveRecord::Base 

    has_many :lists 

    authenticates_with_sorcery! 

    attr_accessible :email, :password, :password_confirmation 

    validates_confirmation_of :password 
    validates_presence_of :password, :on => :create 
    validates_presence_of :email 
    validates_uniqueness_of :email 
end 

...和我的List模型是這樣的:

class List < ActiveRecord::Base 
    belongs_to :user 
end 

從MySQL表的設計視圖如下:

users

enter image description here

listsenter image description here

這聽起來好像有可能是有關係的問題,但我似乎無法把這個在一起。有沒有人有任何見解?我從來沒有遇到任何麻煩,就像在Linux機器上運行Rails 3.0.X一樣,但這是我第一次進入OSX的Rails 3.1,所以我不確定是否可能忽略了一個潛在的變化?

感謝您的任何指導

+0

Rails的服務器緩存ActiveRecord的數據,你嘗試重新啓動嗎? – ryudice

+0

@ryudice - 是的,每次更改重新啓動服務器和控制檯 - 是我的User.where子句中的一個疏忽! – Evan

回答

5
User.where(...) 

返回用戶對象的集合,而不是用戶對象。你需要獲得一個用戶對象。

@user = User.where(...).first 

,或者更好的

@user = User.find_by_email("[email protected]") 
+0

哇,我知道這將是一個明顯的答案 - 非常感謝您爲我指出這一點,非常感謝!我敢肯定,如果我在表中添加了超過1個用戶記錄,haha – Evan

+0

@David非常感謝分享,我正在尋找到處尋找這些屬性,而不是find_by調用 –

相關問題