添加TOS协议复选框与Devise

Sku*_*kud 10 validation ruby-on-rails devise ruby-on-rails-3 ruby-on-rails-3.2

我们正在为我们的会员使用设计.我们在成员模式中添加了一个tos_agreement字段(boolean),并将其添加到views/devise/registrations/new.html.haml.

在Member模型中,我们有一个验证规则如下:

validates_acceptance_of :tos_agreement, :allow_nil => false,
  :accept => true
Run Code Online (Sandbox Code Playgroud)

它工作正常 - 如果你不接受服务条款,你不能注册.

但是,编辑设置时会出现问题.如果你去,/members/edit你会得到一个表格,你可以在那里更改你的电子邮件地址或密码.TOS协议没有任何字段,因为此时不应更改.但是,当您进行更改(例如更改密码)并提交表单时,它会返回错误消息,表明TOS协议不能为false.

我们如何告诉它在首次注册后永远不会尝试修改TOS协议?

编辑:所以我认为根本问题是我们在attr_accessible中有:tos_agreement,这是一个非常糟糕的想法,现在我想起来了.但是如果我们删除它,我们如何修改Devise以接受参数并对其执行某些操作,即使它不是可批量分配的?

小智 23

您可以将:on =>:create选项传递给验证程序,以便仅在注册时检查:

validates_acceptance_of :tos_agreement, :allow_nil => false, :accept => true, :on => :create
Run Code Online (Sandbox Code Playgroud)

  • 这应该标记为正确的答案.它简单地回答了原始海报的问题.正是OP最初要求的.如果OP后来的情况发生了变化,那并不意味着要求那个回复您确切问题的人. (2认同)