我是 RoR 开发的相对业余爱好者(大约一个月的经验),到目前为止,我一直在引用来自不同控制器的变量,没有任何问题。我正在为博客开发 CMS,但我无法让博客作者的用户名出现在索引或显示页面上。我收到“nil:NilClass 的未定义方法‘用户名’”错误。但是,我可以得到身份证。任何人都可以帮助指出我的代码中的错误吗?我将不胜感激。
这是博客模型:
class Blog < ActiveRecord::Base
attr_accessible :post, :title
has_one :users
belongs_to :user
end
这是博客控制器的显示和索引部分:
def index
@users = User.all
@blogs = Blog.all
respond_to do |format|
format.html # index.html.erb
format.json { render json: @blogs }
end
end
# GET /blogs/1
# GET /blogs/1.json
def show
@blog = Blog.find(params[:id])
@users = User.all
respond_to do |format|
format.html # show.html.erb
format.json { render json: @blog }
end
end
这是 index.html.erb 代码:
<% @blogs.each do |blog| %>
<tr>
<td><%= blog.title %></td>
<td><%= blog.post %></td>
<td><%= blog.user.username %></td> #blog.user_id works perfectly here.
<td><%= link_to 'Show', blog %></td>
<td><%= link_to 'Edit', edit_blog_path(blog) %></td>
<td><%= link_to 'Destroy', blog, method: :delete, data: { confirm:'sure?'} %></td>
</tr>
<% end %>
这是 show.html.erb 文件的代码:
<p>
<b>Title:</b>
<%= @blog.title %>
</p>
<p>
<b>Author:</b>
<%= @blog.user.username %>
</p>
<p>
<b>Post:</b>
<%= @blog.post %>
</p>
这是博客控制器中的创建代码:
Here is the create code:
# POST /blogs
# POST /blogs.json
def create
@blog = Blog.new(params[:blog])
@blog.user_id = current_user
respond_to do |format|
if @blog.save
format.html { redirect_to @blog, notice: 'Blog was successfully created.' }
format.json { render json: @blog, status: :created, location: @blog }
else
format.html { render action: "new" }
format.json { render json: @blog.errors, status: :unprocessable_entity }
end
end
end