在评论时显示用户的电子邮件而不是要求输入

时间:2013-12-29 19:33:10

标签: ruby-on-rails ruby-on-rails-4

我创建了一个博客,用户可以在帖子下创建评论。注册用户,管理员和访客将能够发表评论。

所以在_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

如果您需要任何其他信息,请告诉我。

由于

2 个答案:

答案 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 %>

感谢您的帮助。