没有新方法的模型错误报告?

时间:2012-08-13 11:31:09

标签: ruby-on-rails ruby-on-rails-3

是否可以在没有新方法的情况下进行模型错误报告?我的理解是,当您想要报告错误时,您将创建以下控制器代码:

 def new
    @product = Product.new

    respond_to do |format|
      format.html # new.html.erb
      format.json { render json: @product }
    end
  end

  def create
    @product = Product.new(params[:product])

    respond_to do |format|
      if @product.save
        format.html { redirect_to @product, notice: 'Product was successfully created.' }
        format.json { render json: @product, status: :created, location: @product }
      else
        format.html { render action: "new" }
        format.json { render json: @product.errors, status: :unprocessable_entity }
      end
    end
  end

然后您将创建一个包含以下代码的表单:

<% if @product.errors.any? %>
    <div id="error_explanation">
      <h2><%= pluralize(@product.errors.count, "error") %> prohibited this product from being saved:</h2>

      <ul>
      <% @product.errors.full_messages.each do |msg| %>
        <li><%= msg %></li>
      <% end %>
      </ul>
    </div>
  <% end %>

但是,您是否可以仅使用控制器中的“创建”方法复制此技术?例如,使用form_tag将数据传递给'create'方法。也许是这样的:

'post',:class =&gt; 'form-horizo​​ntal',:style =&gt; 'text-align:center')do%&gt;
            <% unless @product.blank? %>
              <% if @product.errors.any? %>
                <div id="error_explanation">
                  <h2><%= pluralize(@product.errors.count, "error") %> prohibited this product from being saved:</h2>

                  <ul>
                  <% @product.errors.full_messages.each do |msg| %>
                    <li><%= msg %></li>
                  <% end %>
                  </ul>
                </div>
              <% end %>
            <% end %>

               <%= text_area_tag :content, '', :placeholder => 'Ask your classmates anything...' %>
               <%= hidden_field_tag :user_id, current_user.id %>
               <%= submit_tag 'Post', :class => "btn btn-medium btn-primary post-room-button"  %>
            <% end %>

我一直在尝试这样做,但我找不到办法让它发挥作用。每当我提交的表单未通过我的模型中的某个验证时,该页面只会重定向到我的创建控制器中respond_to函数中的“其他”路径。

1 个答案:

答案 0 :(得分:0)

您可以从控制器中删除竞争新方法,但不删除视图文件中存在的新视图。

当你说渲染动作时:“new”它会渲染你的应用程序的views文件夹中的new.html.erb文件,当你说redirect_to动作时:“new”它会调用控制器的新动作并且会执行新操作中的操作,然后渲染new.html.erb。

您无法呈现创建操作,因为它不包含任何视图文件,并且POST请求支持创建操作,而不是GET请求