是否可以在没有新方法的情况下进行模型错误报告?我的理解是,当您想要报告错误时,您将创建以下控制器代码:
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-horizontal',: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
函数中的“其他”路径。
答案 0 :(得分:0)
您可以从控制器中删除竞争新方法,但不删除视图文件中存在的新视图。
当你说渲染动作时:“new”它会渲染你的应用程序的views文件夹中的new.html.erb文件,当你说redirect_to动作时:“new”它会调用控制器的新动作并且会执行新操作中的操作,然后渲染new.html.erb。
您无法呈现创建操作,因为它不包含任何视图文件,并且POST请求支持创建操作,而不是GET请求