新しい方法なしでモデルのエラー報告を行うことは可能ですか? エラーを報告したい場合は、次のコントローラーコードを作成することを理解しています。
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-horizontal', :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」パスにリダイレクトされます。