2012-03-03 88 views
2

我無法讓我的模型關聯,或者我不知道如何通過關聯進行查詢。通過導軌協會查詢

class Entry < ActiveRecord::Base 
    has_one :category 
end 

class Category < ActiveRecord::Base 
    belongs_to :entry 
end 

現在,如果我進入我的鐵軌控制檯,並要求Entry.first,我得到:

Entry Load (0.1ms) SELECT "entries".* FROM "entries" LIMIT 1 
=> #<Entry id: 1, category_id: 1, duration: 2.0, image: "3", note: "4", url: "5", created_at: "2012-03-03 02:22:23", updated_at: "2012-03-03 02:22:23"> 

,如果我問Category.first因爲我得到:

Category Load (0.1ms) SELECT "categories".* FROM "categories" LIMIT 1 
=> #<Category id: 1, name: "Dev", created_at: "2012-03-03 02:17:17", updated_at: "2012-03-03 02:17:17"> 

但是,如果我請求Entry.first.category.name,它中斷,我得到:

Entry Load (0.1ms) SELECT "entries".* FROM "entries" LIMIT 1 
NoMethodError: undefined method `category' for #<Entry:0x007fec4d217848> 
from /Users/john/.rbenv/versions/1.9.2-p290/lib/ruby/gems/1.9.1/gems/activemodel-3.2.1/lib/active_model/attribute_methods.rb:407:in `method_missing' 
from /Users/john/.rbenv/versions/1.9.2-p290/lib/ruby/gems/1.9.1/gems/activerecord-3.2.1/lib/active_record/attribute_methods.rb:126:in `method_missing' 
from (irb):63 
from /Users/john/.rbenv/versions/1.9.2-p290/lib/ruby/gems/1.9.1/gems/railties-3.2.1/lib/rails/commands/console.rb:47:in `start' 
from /Users/john/.rbenv/versions/1.9.2-p290/lib/ruby/gems/1.9.1/gems/railties-3.2.1/lib/rails/commands/console.rb:8:in `start' 
from /Users/john/.rbenv/versions/1.9.2-p290/lib/ruby/gems/1.9.1/gems/railties-3.2.1/lib/rails/commands.rb:41:in `<top (required)>' 
from script/rails:6:in `require' 
from script/rails:6:in `<main>' 

這是爲什麼?如何通過條目獲取該類別的名稱?我究竟做錯了什麼?

回答

3

在你的情況一個分類表應該有entry_id列,但你有category_id在條目一。

所以嘗試改變:

class Entry < ActiveRecord::Base 
    belongs_to :category 
end 

class Category < ActiveRecord::Base 
    has_one :entry 
end 

或更改數據庫架構。

+1

謝謝。我試了兩個方向,但沒有意識到我需要重新加載模型更改後的軌道控制檯。現在我明白了! :) – John 2012-03-03 07:00:44