我希望能够显示对帖子发表评论的人的用户名。我在显示它时遇到了一些困难。正如代码现在所说的那样,我得到一个未定义的方法`user' for nil:行视图上的NilClass:<%= @ comment.user.name%>。再次提前谢谢你。
评论控制器
class CommentsController < ApplicationController
before_filter :authenticate_user!
def new
@post = Post.find(params[:post_id])
@comment = Comment.new
end
def create
@post = Post.find_by_id(params[:post_id])
@comment = @post.comments.create(params.require(:comment).permit(:commenter, :body))
@comment.user = current_user
respond_to do |format|
if @comment.save
format.html { redirect_to @post, notice: 'Comment was successfully created.' }
format.json { render json: @comment, status: :created, location: @comment }
else
format.html { render action: "new" }
format.json { render json: @comment.errors, status: :unprocessable_entity }
end
end
end
def destroy
@post = Post.find(params[:post_id])
@comment = @post.comments.find(params[:id])
@comment.destroy
redirect_to post_path(@post)
end
def show
@comment = Comment.new
end
private
def comment_params
params.require(:comments).permit(:commenter, :body)
end
end*
查看/ _comments
<%= div_for(comment) do %>
<p>
<strong>Posted <%= time_ago_in_words(comment.created_at) %> ago</strong></br>
<%= h(comment.body) %>
<%= @comment.user.name %>
<%= link_to 'Delete', [@post, comment], :method => :delete, :confirm => "Are you sure?" %>
</p>
<% end %>
用户模型
has_many :comments
评论模型
class Comment < ActiveRecord::Base
belongs_to :post
belongs_to :user
end
答案 0 :(得分:1)
在您的评论控制器中,您的创建方法应该如下所示:
def create
@comment = current_user.comments.new(comment_params)
respond_to do |format|
if @comment.save
format.html { redirect_to @comment, notice: 'Comment was successfully created.' }
format.json { render :show, status: :created, location: @comment }
else
format.html { render :new }
format.json { render json: @comment.errors, status: :unprocessable_entity }
end
end
end
然后在你的view / _comments文件中你应该有这样的东西:
Added:<%= time_ago_in_words(comment.created_at) %> ago<br>
Added by: <%= current_user.email %>
如果有帮助,请告诉我
答案 1 :(得分:0)
<%= @comment.user.name %>
应该是<%= comment.user.name %>
(@
之前没有comment
),因为该视图/部分在该点使用局部变量,而不是实例变量。< / p>
只是提示您的问题:您应该为视图片段提供更多上下文。它是全视图,视图的一部分还是部分视图?它的文件名/它映射到哪个控制器操作是什么?如果它是部分的,那么它是从哪个视图呈现的?
答案 2 :(得分:0)
使用Rails / REST约定,show动作负责呈现特定资源实例的表示。为此,它需要来自params的id,通过id查找资源实例,并呈现响应。您的show动作应加载现有注释,而不是创建新注释。新评论不会分配用户,这就是您在nil对象上调用方法时出错的原因 - 尚未设置新评论的用户。
在您的演出动作中尝试以下操作:
@commment = Comment.find params[:id]
答案 3 :(得分:0)
我能够解决这个问题。 &lt;%= current_user.name%&gt;需要在我的_comment视图中,我从我的评论控制器中删除了@ comment.user = current_user。感谢大家的帮助。
查看/ _comments.html
<%= div_for(comment) do %>
<p>
<strong>Posted <%= time_ago_in_words(comment.created_at) %> ago</strong></br>
<%= h(comment.body) %>
<%= current_user.name %>
<%= link_to 'Delete', [@post, comment], :method => :delete, :confirm => "Are you sure?" %>
</p>
<% end %>
评论控制器
class CommentsController < ApplicationController
before_filter :authenticate_user!
def new
@post = Post.find(params[:post_id])
@comment = Comment.new
end
def create
@post = Post.find_by_id(params[:post_id])
@comment = @post.comments.create(params.require(:comment).permit(:commenter, :body))
respond_to do |format|
if @comment.save
format.html { redirect_to @post, notice: 'Comment was successfully created.' }
format.json { render json: @comment, status: :created, location: @comment }
else
format.html { render action: "new" }
format.json { render json: @comment.errors, status: :unprocessable_entity }
end
end
end
def destroy
@post = Post.find(params[:post_id])
@comment = @post.comments.find(params[:id])
@comment.destroy
redirect_to post_path(@post)
end
def show
@commment = Comment.find params[:id]
end