【问题标题】:Adding TOS agreement checkbox with Devise使用 Devise 添加 TOS 协议复选框
【发布时间】:2013-01-21 03:40:41
【问题描述】:

我们正在为我们的会员使用设计。我们在成员架构中添加了一个 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 以接受该参数并对其进行处理,即使它不是可批量赋值的?

【问题讨论】:

  • 您实际上也不需要在数据库中为这些类型的变量创建一个字段,rails 只会为您创建一个虚拟字段。 guides.rubyonrails.org/…

标签: ruby-on-rails ruby-on-rails-3 validation devise ruby-on-rails-3.2


【解决方案1】:

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

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

【讨论】:

  • 这应该被标记为正确答案。它只是回答了原始海报的问题。正是OP最初要求的。如果 OP 的情况后来发生了变化,这并不意味着要归功于回答您确切问题的那个人。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-15
  • 2020-07-02
  • 2018-01-06
相关资源
最近更新 更多