我有这个问题的时间太长了,我不能找出问题出在哪里,所以:未定义的方法名称:NilClass
Showing /home/alex/Desktop/personal/app/views/entries/list.html.erb where line #17 raised:
undefined method `name' for nil:NilClass
Extracted source (around line #17):
14: <% @entries.each do |entry| %>
15: <tr>
16: <td><%= link_to entry.title, :action => "show", :id => entry.id %></td>
17: <td><%= link_to entry.category.name, :action => "list", :category_id => entry.category.id %></td>
18: </tr>
19: <% end %>
20:
我的意见/项/ list.html.erb外表看起来是这样的:
<html>
<head>
<title>All Entries</title>
</head>
<body>
<h1>Online Personal Collection- All Entries</h1>
<table border="1">
<tr>
<td width="80%"><p align="center"><i><b>Entry</b></i></td>
<td width="20%"><p align="center"><i><b>Category</b></i></td>
</tr>
<% @entries.each do |entry| %>
<tr>
<td><%= link_to entry.title, :action => "show", :id => entry.id %></td>
<td><%= link_to entry.category.name, :action => "list", :category_id => entry.category.id %></td>
</tr>
<% end %>
</table>
<p><%= link_to "Create new entry", :action => "new" %></p>
<br />
<%=link_to "Back to Index", entries_path%>
<br />
<%=link_to "Back to Account Info", my_account_path%>
<br />
<h3>Enter keyword</h3>
<form action ="search" method="post">
<input name = "key" type="input" />
<input value="Send" type="submit"/>
</form>
</body>
</html>
的模型是这样的:
class Entry < ActiveRecord::Base
attr_accessible :comments, :date, :description, :title, :category_id, :category_name
belongs_to :category
after_create do |entry|
logger.info "entry created: #{entry.title} #{entry.description}"
end
end
class Category < ActiveRecord::Base
attr_accessible :name
has_many :entries
end
而且entries_controller:
class EntriesController < ApplicationController
# GET /entries
# GET /entries.json
def index
@entries = Entry.all
respond_to do |format|
format.html # index.html.erb
format.json { render json: @entries }
end
end
def list
if params[ :category_id].nil?
@entries = Entry.find(:all)
else
@entries = Entry.find(:all ,
:conditions => ["category_id = ?" , params[ :category_id]])
params[ :category_id] = nil
respond_to do |format|
format.html # list.html.erb
format.json { render json: @entry }
end
end
end
# GET /entries/1
# GET /entries/1.json
def show
@entry = Entry.find(params[:id])
@category = Category.find(:all)
respond_to do |format|
format.html # show.html.erb
format.json { render json: @entry }
end
end
# GET /entries/new
# GET /entries/new.json
def new
@entry = Entry.new
@categories= Category.find(:all)
respond_to do |format|
format.html # new.html.erb
format.json { render json: @entry }
end
end
# GET /entries/1/edit
def edit
@entry = Entry.find(params[:id])
@categories = Category.find(:all)
end
# POST /entries
# POST /entries.json
def create
@entry = Entry.new(params[:entry])
respond_to do |format|
if @entry.save
format.html { redirect_to @entry, notice: 'Entry was successfully created.' }
format.json { render json: @entry, status: :created, location: @entry }
else
format.html { render action: "new" }
format.json { render json: @entry.errors, status: :unprocessable_entity }
end
end
end
# PUT /entries/1
# PUT /entries/1.json
现在,如果有人发现问题,并可以帮助我了解我在做错的地方,我将不胜感激。 谢谢! Alex。
欣赏,但要么我不明白你对我说或不工作。我得到这个:被调用的ID为零,这将错误地为4 - 如果你真的想要的ID为零,请使用object_id提取的源代码(在第17行左右):16:<%= link_to entry.title,:action = >“show”,:id => entry.id%> 17:<%= link_to entry.category_name,:action =>“list”,:category_id => entry.category.id%> 18: 19 :<% end %>我改变了模型,如你所说和这个:<%= link_to entry.category_name,:action =>“list”,:category_id => entry.category.id%> –
那么,你会得到相同的现在出错了,但在'entry.category.id'上。一分钟,我会看看我是否可以编辑我的答案以提供更多帮助。 –
应该有额外的结束权利?因为它给我一个语法错误: /home/alex/Desktop/personal/app/views/entries/list.html.erb:20:语法错误,意外的关键字结束,期待')' '); (第20行左右): 17:<%= link_to_if(entry.category,entry。CATEGORY_NAME,:动作=> “清单”,:CATEGORY_ID => entry.category.id%> 18: 19: 20:<% end %> 21: 22: 23: –