加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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?

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读