Belongs_to仅由控制台识别,而不是服务器识别

时间:2013-04-20 08:03:47

标签: ruby-on-rails foreign-keys entity-relationship models belongs-to

我的项目有一个非常奇怪的问题。我有2个型号,一个是Link,另一个是Category。我有一个索引视图,其中应列出所有链接以及相应的类别名称。运行服务器并尝试使用

<%= 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 个答案:

答案 0 :(得分:0)

也许我可以帮助其他人面对同样的问题。

通过查询db中现有类别的表单将category_id分配给链接。

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

我想要分配的类别的id = 1.从下拉菜单中选择类别后,link.category_id为0,它应为1。

更新:

我通过以下方法修正了错误的索引:

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