ruby-on-rails – 自定义操作的Rails验证
发布时间:2020-12-17 01:50:00 所属栏目:百科 来源:网络整理
导读:我知道你可以这样做: validates :cat_no,:presence = true,:on = :create 我有一个自定义动作: def approve @product = Product.find(params[:id]) @product.update_attribute :approved,true redirect_to product_path(@product) end 我想这样做: valida
我知道你可以这样做:
validates :cat_no,:presence => true,:on => :create 我有一个自定义动作: def approve @product = Product.find(params[:id]) @product.update_attribute :approved,true redirect_to product_path(@product) end 我想这样做: validates :cat_no,:on => :approve 这似乎不起作用.有一个简单的方法吗? 解决方法
我认为你误解了验证的想法.验证由模型的更改(通过保存,创建或更新)触发,而不是由控制器操作触发,因此在您的情况下让批准的操作触发验证是没有意义的.
看看你的代码,在我看来你真正想做的是在模型更新时对cat_no进行验证,条件是已批准的值刚刚变为真(即你批准的行为的第2行) @ product.update_attribute:approved,true). 我认为下面的代码应该实现: validates :cat_no,:on => :update,:if => :just_approved? def just_approved? changed.include?("approved") && approved? end 更新: 回想起来,上面的验证可能比你真正想要的更宽松.如果您有批准的记录并且将cat_no更改为nil,则它将验证,因为已批准未更改(因此已更改.include?(“approved”)将评估为false). 更有可能这是你真正想要的: validates :cat_no,:if => :approved? (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |