Rails:无法呈现错误消息

时间:2016-09-26 00:14:57

标签: ruby-on-rails

我试图渲染模型验证产生的错误消息,但我最终得到了这个错误:

  

表单中的第一个参数不能包含nil或为空

希望提供的代码有帮助...我在使用时至少可以加载页面:注释而不是@comment,但后来我不知道如何渲染错误部分因为它是一个符号而不是一个实际的对象。现在我已将其更改为对象的实例变量,我收到错误。

错误消息部分

<% if object.errors.any? %>
   <div id="error_explanation">
     <div class="alert alert-danger">
        The form contains <%= pluralize(object.errors.count, "error") %>
     </div>
    <ul>
      <% object.errors.full_messages.each do |msg| %>
        <li><%= msg %></li>
      <% end %>
    </ul>
   </div>
<% end %>

评论表单

<%= form_for @comment, url: comments_path do |f| %>
   <%= render 'shared/error_messages', object: f.object %>
   <%= f.hidden_field :user_id, value: current_user.id %>
   <%= f.hidden_field :post_id, value: post.id %>
   <%= f.text_area :content, size: "60x2", placeholder: "Comment on this post..." %>
   <%= f.submit "Comment" %>
   

发布表格

<%= form_for [@user, @post] do |f| %>
   <%= render 'shared/error_messages', object: f.object %>
   <%= f.text_area :content, size: "60x12", placeholder: "What do you want to say?" %>
   <%= f.submit "Post" %>
<% end %>    
class CommentsController < ApplicationController
  def index
    @comments = Comment.all
  end

  def new
    @comment = Comment.new
    @user = User.find(params[:user_id])
  end

  def create
    @user = current_user
    #@post = Post.find(params[:post_id])
    @comment = @user.comments.build(comment_params)

    if @comment.save
        flash[:success] = "Comment Posted!"
        redirect_back(fallback_location: root_path)
    else
        flash[:notice] = "Could not post comment"
        redirect_back(fallback_location: root_path)
    end
  end


  private

  def comment_params
    params.require(:comment).permit(:content, :user_id, :post_id)
  end
end
class PostsController < ApplicationController

  def index
    @posts = Post.all
    @user = User.find(params[:user_id])
  end

  def new
    @post = Post.new
    @user = User.find(params[:user_id])
  end

  def create
    @post = current_user.posts.build(post_params)
    if @post.save
        flash[:success] = "Posted!"
        redirect_to user_path(current_user)
    else
        flash[:notice] = "Post could not be submitted"
        redirect_to users_path
    end
  end

  private

  def post_params
    params.require(:post).permit(:content)
  end
end

1 个答案:

答案 0 :(得分:0)

我能够通过在我的帖子#index action中声明一个@comment变量来获取它,因为这是从

呈现视图的地方