0

新しい方法なしでモデルのエラー報告を行うことは可能ですか? エラーを報告したい場合は、次のコントローラーコードを作成することを理解しています。

 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 => 'form-horizo​​ntal', :style => 'text-align:center') do %>
            <% 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 つに失敗したフォームを送信するたびに、ページは作成コントローラーの関数の「else」パスにリダイレクトされます。

4

1 に答える 1

0

コントローラーから競合する新しいメソッドを削除することはできますが、ビュー ファイルに存在する新しいビューを削除することはできません。

render action: "new" と言うと、アプリのビュー フォルダーにある new.html.erb ファイルがレンダリングされ、redirect_to action: "new" と言うと、コントローラーの新しいアクションが呼び出され、操作が実行されます。 new アクションに存在し、new.html.erb をレンダリングします。

ビュー ファイルが含まれていないため作成アクションをレンダリングできず、REST は GET 要求ではなく POST 要求でサポートされているため、作成アクションは実行できません。

于 2012-08-13T11:48:59.557 に答える