我们正在为我们的成员使用design。我们在成员模式中添加了一个tos_agreement字段(布尔值),并将其添加到views/devise/registrations/new.html.haml
中。
在成员模型中,我们有一个验证规则如下:
validates_acceptance_of :tos_agreement, :allow_nil => false,
:accept => true
它运行良好-如果你不接受TOS,你就不能注册。
但是,编辑设置时会出现问题。如果你去/members/edit
,你会得到一个表格,你可以在那里更改你的电子邮件地址或密码。TOS协议没有任何字段,因为在这一点上不应该改变。然而,当您进行更改(例如更改密码)并提交表单时,它会返回一条错误消息,即TOS协议不能为假。
我们怎么能告诉它在第一次注册后永远不要试图修改TOS协议?
编辑:所以我认为根本问题是,我们的attr_accessible中有:tos_agreement,现在我认为这是一个非常糟糕的主意。但如果我们删除它,我们如何修改Devise以接受该参数并对其进行处理,即使它不可批量分配?
您可以将一个:on=>:create选项传递给验证器,以便仅在注册时进行检查:
validates_acceptance_of :tos_agreement, :allow_nil => false, :accept => true, :on => :create