是否可以为:on
选项提供多个条目
validates
验证?
如下所示:
class Library < ActiveRecord::Base
validates :presence => true, :on => [:create, :update, :some_other_action]
end
基本上我想在多个时运行一个特定的验证
动作在控制器中调用。例如,我想
在create
操作上验证update
操作的某些用户信息,
也可能还有其他一些行动。
虽然我不希望验证在所有方法上运行。
此外,如果有更简单的方法,那也很棒!
提前致谢!
答案 0 :(得分:9)
是。可用于导轨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]
答案 1 :(得分:5)
是创建和更新!
:on - 指定此验证何时处于活动状态。默认情况下在所有验证上下文中运行(无),其他选项为:创建和:更新
但是将这些值视为数据库数据创建或更新语句,而不是rails控制器操作。他们可能对数据和数据库做了类似的事情,但它们是不同的 例如,您可能有另一个rails方法也可以更新数据库,可能会更新不同的字段,但是上面的':update'仍将考虑该方法,即使它不是来自名为'update'的rails操作。
答案 2 :(得分:1)
这是不可能的。为什么?这些:on
事件不是控制器内的动作名称,而是预定义的ActiveRecord(MODEL)事件,:create
或:update
或:save
控制器方法和模型方法之间没有自动连接。
答案 3 :(得分:0)
有一个非常相似的问题,我必须跳过某些控制器操作的验证,我尝试了上述方法,但我的问题没什么不同,所以他们没有为我工作,所以我做的是使用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