0

我的項目中出現了一個非常奇怪的問題。我有兩個模型,一個是Link和另一個類別。我有一個索引視圖,其中應列出所有鏈接以及相應的類別名稱。當運行的服務器,並嘗試使用Belongs_to只能通過控制檯識別,而不是服務器

<%= link.category.name %> 

我得到一個錯誤頁面如下:

undefined method `name' for nil:NilClass 

但是當我打開控制檯,並寫上:

link = Link.find(1) #there is currently only one link 
link.category.name 

它返回正確的類別名稱。

這裏是我的模型和schema.rb:

class Link < ActiveRecord::Base 
    attr_accessible :category_id, :description, :title, :url, :visible 

    belongs_to :category 

    scope :visible, lambda { where(visible: true) } 
end 

class Category < ActiveRecord::Base 
    attr_accessible :name 

    has_many :links 

end 

ActiveRecord::Schema.define(:version => 20130420070717) do 

    create_table "categories", :force => true do |t| 
    t.string "name" 
    t.datetime "created_at", :null => false 
    t.datetime "updated_at", :null => false 
    end 

    add_index "categories", ["id"], :name => "index_categories_on_id" 

    create_table "links", :force => true do |t| 
    t.string "title" 
    t.text  "description" 
    t.string "url" 
    t.integer "category_id" 
    t.boolean "visible" 
    t.datetime "created_at", :null => false 
    t.datetime "updated_at", :null => false 
    end 

    add_index "links", ["category_id"], :name => "index_links_on_category_id" 
    add_index "links", ["id"], :name => "index_links_on_id" 
end 

這是怎麼發生的?非常感謝您的幫助!

+1

你能否看到你的所有鏈接是否與一個類別綁定?例如由於某種原因,category_id不是零? 嘗試做到這一點,並告訴我它返回的是什麼:'Link.all.collect(&:category_id).include?(nil)' – Zippie 2013-04-20 08:45:51

+0

感謝您的快速響應!當我在控制檯中執行它時,它返回false。目前db中只有1個鏈接,它有一個正確的category_id。 – Linus 2013-04-20 08:58:04

+0

呵呵,我不知道..你可以展示你的視圖代碼嗎? – Zippie 2013-04-20 09:00:04

回答

0

也許我可以幫助其他人面對同樣的問題。

category_id是通過從db中查詢現有類別的表單分配給鏈接的。

<%= f.select(:category_id, @categories.collect { |c| c.name }) %> 

我想分配的類別有ID = 1後,從下拉菜單中選擇類,link.category_id爲0,它應該是1

UPDATE:

我修復了錯誤的索引:

<%= f.collection_select :category_id, @categories, :id, :name, :prompt => "Select a category" %> 
相關問題