验证:条款,接受:真实不显示错误

Mat*_*ski 0 ruby ruby-on-rails simple-form

在我的模型中,我有以下验证器:

validates :terms, acceptance: true, on: :create, allow_nil: false
attr_accessor :terms
Run Code Online (Sandbox Code Playgroud)

在我的形式我有:

= simple_form_for @reservation do |f|
  = f.error_notification
  = f.input :terms, as: :boolean 
Run Code Online (Sandbox Code Playgroud)

问题是,当用户不接受不显示任何错误的条款时,为什么?

小智 6

试试这个:

validates :terms, :acceptance => {:accept => true} , on: :create, allow_nil: false
Run Code Online (Sandbox Code Playgroud)

  • `allow_nil: false` 救了我。谢谢! (2认同)

Gag*_*ami 5

问题可能会将术语作为表中的实际列.通常,在没有这样的列的情况下使用validates_acceptance_of,在这种情况下,它定义属性访问器并将其用于其验证.

为了使validates_acceptance_of在映射到实际表列时起作用,必须传递:accept选项,如:

validates :terms, :acceptance => {:accept => true} , :on => :create , allow_nil: false
Run Code Online (Sandbox Code Playgroud)

其原因与Active Record中的类型转换有关.当命名属性实际存在时,AR会根据数据库列类型执行类型转换.在大多数情况下,接受列将被定义为布尔值,因此model_object.terms将返回true或false.

当没有这样的列时,attr_accessor :terms只返回从params散列传入模型对象的值,该散列通常"1"来自复选框.

通过noodl