Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 验证:条款,接受:true不显示错误_Ruby On Rails_Ruby_Simple Form - Fatal编程技术网

Ruby on rails 验证:条款,接受:true不显示错误

Ruby on rails 验证:条款,接受:true不显示错误,ruby-on-rails,ruby,simple-form,Ruby On Rails,Ruby,Simple Form,在我的模型中,我有以下验证器: validates :terms, acceptance: true, on: :create, allow_nil: false attr_accessor :terms 以我的形式,我有: = simple_form_for @reservation do |f| = f.error_notification = f.input :terms, as: :boolean 问题是,当用户不接受条款时,它不会显示任何错误,为什么?请尝试以下操作: v

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

validates :terms, acceptance: true, on: :create, allow_nil: false
attr_accessor :terms
以我的形式,我有:

= simple_form_for @reservation do |f|
  = f.error_notification
  = f.input :terms, as: :boolean 
问题是,当用户不接受条款时,它不会显示任何错误,为什么?

请尝试以下操作:

validates :terms, :acceptance => {:accept => true} , on: :create, allow_nil: false

问题可能有术语作为表中的实际列。通常情况下,在没有这样一个列的情况下,验证的接受度。在这种情况下,它定义了一个属性访问器,并使用该属性访问器进行验证

为了使validates\u acceptance\u在映射到实际表列时工作,必须传递:accept选项,如:

validates :terms, :acceptance => {:accept => true} , :on => :create , allow_nil: false
其原因与活动记录中的类型转换有关。当命名属性实际存在时,AR根据数据库列类型执行类型转换。在大多数情况下,验收列将被定义为布尔值,因此
model\u对象。terms
将返回true或false

当没有这样的列时,
attr\u accessor:terms
只返回从参数散列传入模型对象的值,该散列通常是复选框中的
“1”


通过noodl,我可能遇到了类似的问题(Rails 4.2.0)。我创建了一个复选框,但它将被忽略,如果不选中,将不会报告错误。我发现将参数添加到我的
.permit
部分允许它出现

在我的
表单的视图模板中
有如下内容:

<div class="field">
  <%= label_tag :tos, 'I accepts the TOS' %><br>
  <%= f.check_box :tos %>
</div>
在靠近底部的地方,我为
thing\u params

def thing_params
  params.require(:thing).permit(:field1, :field2, :tos)
end
在我的模型中,我使用了以下内容:

validates_acceptance_of :tos
如果我像这样漏掉“:tos
参数require(:thing).permit(:field1,:field2),它将不会弹出错误并允许它继续。这似乎违反直觉,因为如果强参数删除:tos字段,那么我认为validate_验收将失败

我最初只是创建了一个复选框,没有使用
f。现在,如果我甚至尝试在没有
:tos的情况下调用
new
路线rails被列为允许的,会抛出一个错误。似乎还有一些rails的神奇之处,因为如果我从我的模型中删除
validates\u acceptance\u of
,我会在呈现我的视图时收到一个
NoMethodError
错误,表示行的
undefined method
tos'`

<%= f.check_box :tos %>


如果其他人能够解释到底发生了什么,那就太好了,因为我刚刚通过谷歌搜索和猜测将其拼凑在一起。

尝试接受:false当我添加接受:false时,不需要用户接受条款。请检查“感谢”以获得帮助,但这并不能解决问题。它仍然没有显示任何验证错误。True:您需要将验收参数添加到强参数中。如果您不这样做并提交表单,则无论复选框的状态如何,表单都将被接受。
allow\u nil:false
saved me。谢谢正如Eric G在下面指出的,您仍然需要添加:接受您允许的参数。allow_nil:不需要false。
<%= f.check_box :tos %>