我创建了一个博客,用户可以在帖子下创建评论。注册用户,管理员和访客将能够发表评论。
所以在_form.html.erb中我写了这个:
<%= simple_form_for([@post, @post.comments.build], html: {class: 'form-horizontal' }) do |f| %>
<% if current_user || current_admin %>
<% @comment.commenter = current_user.try(:email) || current_admin.try(:email) %>
<% else %>
<%= f.input :commenter %>
<% end %>
<%= f.input :body %>
<%= f.button :submit %>
<% end %>
但是我得到了这个错误:未定义的局部变量或方法`comment'。
当我尝试将@ comment.commenter更改为@ post.comments时,我收到错误:“example@person.com”的未定义方法“each”:字符串。
如果注册了评论者的名字,是否有办法设置?就像在控制器中一样?
控制器代码为:
class CommentsController < ApplicationController
def create
@post = Post.find(params[:post_id])
@comment = @post.comments.create(comments_params)
redirect_to post_path(@post)
end
def destroy
@post = Post.find(params[:post_id])
@comment = @post.comments.find(params[:id])
@comment.destroy
redirect_to post_path(@post)
end
private
def comments_params
params.require(:comment).permit(:commenter, :body)
end
end
如果您需要任何其他信息,请告诉我。
由于
答案 0 :(得分:1)
<%= simple_form_for(@comment),url: [@post,@comment], html: {class: 'form-horizontal' }) do |f| %>
<%= f.input :commenter, value: comment_by_user %>
<%= f.input :body %>
<%= f.button :submit %>
辅助
def comment_by_user
current_user.try(:email) || current_admin.try(:email) if current_user || current_admin
end
控制器
class CommentsController < ApplicationController
before_filter :find_post
def new
@comment = @post.comments.build
end
def create
@comment = @post.comments.create(comments_params)
redirect_to post_path(@post)
end
def destroy
@comment = @post.comments.find(params[:id])
@comment.destroy
redirect_to post_path(@post)
end
private
def find_post
@post = Post.find(params[:post_id])
end
end
答案 1 :(得分:0)
找到解决方案:
控制器:
def create
@post = Post.find(params[:post_id])
@comment = @post.comments.create(comments_params)
if current_admin || current_user
@comment.commenter = current_user.try(:email) || current_admin.try(:email)
@comment.save
end
redirect_to post_path(@post)
end
查看:
<%= simple_form_for([@post, @post.comments.build], html: {class: 'form-horizontal' }) do |f| %>
<% if current_admin || current_user %>
<%= f.input :body %>
<% else %>
<%= f.input :commenter %>
<%= f.input :body %>
<% end %>
<%= f.button :submit %>
<% end %>
感谢您的帮助。