【问题标题】:Rails: Can't render error messagesRails:无法呈现错误消息
【发布时间】:2016-09-26 09:00:45
【问题描述】:

我正在尝试呈现模型验证产生的错误消息,但最终出现此错误:

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

希望提供的代码对我有所帮助...当我使用 :comment 而不是 @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

【问题讨论】:

  • object: f.object? 我相信这是不正确的。尝试将其更改为评论:object: @comment,发布:object: @post
  • 我可以通过在我的 posts#index 操作中声明一个 @comment 变量来获得它,因为这是视图呈现的位置

标签: ruby-on-rails


【解决方案1】:

我可以通过在我的 posts#index 操作中声明一个 @comment 变量来获取它,因为这是视图的呈现位置

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-05-22
    • 2013-01-24
    • 1970-01-01
    • 2021-05-19
    • 2016-07-06
    • 1970-01-01
    • 2011-03-22
    相关资源
    最近更新 更多