繁体   English   中英

Rails验证... multiple:on options?

[英]Rails validates…multiple :on options?

是否可以为validates验证的:on选项提供多个条目?

类似于以下内容:

class Library < ActiveRecord::Base

  validates :presence => true, :on => [:create, :update, :some_other_action]

end

基本上我想在控制器中调用多个动作时运行一个特定的验证。 例如,我想验证有关create操作, update操作以及可能的其他一些操作的一些用户信息。

虽然我不希望验证在所有方法上运行。

此外,如果有一个更简单的方法,这也将是伟大的!

提前致谢!

是。 可用于导轨4.1。

PR: https//github.com/rails/rails/pull/13754/files官方文档: http//api.rubyonrails.org/classes/ActiveModel/Validations/ClassMethods.html#method-i-validate

语法: on: [:create, :custom_validation_context]

是的,用于创建和更新!

:on - 指定此验证何时处于活动状态。 默认情况下在所有验证上下文中运行(nil),其他选项包括:create:update

但是将这些值视为数据库数据创建或更新语句,而不是rails控制器操作。 他们可能对数据和数据库做了类似的事情,但它们是不同的。
例如,您可能有另一个rails方法也可以更新数据库,可能会更新不同的字段,但是上面的':update'仍将考虑该方法,即使它不是来自名为'update'的rails操作。

这是不可能的。 为什么? 这些:on事件不是控制器内的动作名称,而是预定义的ActiveRecord(MODEL)事件, :create:update:save

控制器方法和模型方法之间没有自动连接。

有一个非常相似的问题,我不得不跳过某些控制器动作的验证,我尝试了上述方法,但我的问题没什么不同,所以它们不适合我,所以我做的是使用attr_accessor和除非配置。

它将顺利地为您的事业服务。

在模型中

validates :password, presence: true, unless: :skip_password_validation

attr_accessor :skip_password_validation

当情况出现时我不需要验证,我只是在控制器中做到了

@user = User.find(params[:id])
@user.skip_password_validation = true 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM