11

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

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

validates_acceptance_of :tos_agreement, :allow_nil => false,
  :accept => true

它工作正常 - 如果您不接受 TOS,则无法注册。

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

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

编辑:所以我认为根本问题是我们的 attr_accessible 中有 :tos_agreement,现在我想这是一个非常糟糕的主意。但是如果我们删除它,我们如何修改 Devise 以接受参数并使用它做一些事情,即使它不是质量可分配的?

4

1 回答 1

23

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

validates_acceptance_of :tos_agreement, :allow_nil => false, :accept => true, :on => :create
于 2013-02-06T04:57:19.640 回答