我正在像这样的控制器动作中创建新产品
product = Product.new
product.name = params['name']
if params['quantity']=="" then product.errors.add(:base, "Quantity must be filled") end
if !product.save
@product = product
render "index"
end
即时查看错误
<% @product.errors.each do |attr, msg| %>
<li> <%= msg %></li>
<% end %>
显示所有错误但仅显示:不显示基本错误。我该如何展示它们?
数量列不是产品型号的一部分。
(解决方案)工作代码:
product.valid?
if params['quantity']=="" then product.errors.add(:base, "error") end
if product.errors.any?
@product = product
render "index"
return
else
product.save
答案 0 :(得分:1)
这不是gona的工作,因为rails在运行验证之前会从错误中删除所有内容。 Save
正在运行验证,因此您的自定义错误已被删除。
我个人认为在控制器内进行任何验证是错误的。但如果您真的想这样做,请尝试:
product = Product.new(name: params[:name])
product.valid?
product.errors.add(:base, "Quantity must be filled") if params['quantity'].blank? then
if product.errors.any? || !product.save(false)
@product = product
render "index"
end
然而,这很可能是一个坏主意。如果数量与产品型号有关,则应通过型号进行验证。如果没有,则不应将其添加到models.errors。
你应该尝试做某事:
product = Product.new(name: params[:name])
if params[:quantity].blank? || !product.save
@product = product
flash[:error] = "Quantity must be filled" unless params[:quantity]
render "index"
end
然后在视图中添加一些代码来处理flash[:error]
。