2013-09-24 32 views
1

进出口创造了这样的Rails:显示控制器添加错误信息

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 

和IM一样,

<% @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

好像你只是想'数量'字段验证... – meagar

回答

1

这不是戈纳工作,如轨道只是运行验证之前删除一切从错误。 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]

+0

谢谢你的作品,我知道它不是最佳做法..但我希望所有的错误消息一次显示..我想过一些一般错误类,我会添加模型错误,但这是更容易..数量是从其他模型,但我需要确保其填充之前,我保存产品..(这两种模型都保存或没有一个)..我编辑问题与工作代码 – Muflix

+1

如果两个模型要同时保存并且彼此关联,则可以在关联上使用自动保存选项。它将允许您一次保存它们,并且如果出错,rails会自动回滚这两个事务。 – BroiSatse

+0

自动保存是有趣的,我不知道..但我会保持现在简单:-) – Muflix