check_box接受在Ruby中不起作用

时间:2014-04-11 10:58:16

标签: ruby-on-rails ruby redmine

我是Ruby的新手,我试图在redmine注册页面添加一个简单的复选框来添加TOS并为每个用户存储TOS的接受。

我制作了迁移脚本:

class AddTosCheckbox < ActiveRecord::Migration
  def self.up
    add_column :users, :tos_accepted, :boolean, :default => false, :null => false
  end

  def self.down
    remove_column :users, :tos_accepted
  end
end

在使用它之后,修改了用户模型,添加了tos_accepted字段:

  safe_attributes 'login',
    'firstname',
    'lastname',
    'mail',
    'mail_notification',
    'language',
    'custom_field_values',
    'custom_fields',
    'identity_url',
    'tos_accepted'

最后,在用户注册表单中,我添加了以下字段:

<p><%= f.check_box :tos_accepted, :acceptance => true %></p>

但我的问题是:接受=&gt;真的没有用;并且用户可以在不接受服务条款的情况下进行注册。

检查接受复选框的正确语法是什么?

2 个答案:

答案 0 :(得分:2)

接受进入模型,而不是视图

Class MyModel < ActiveRecord::Base
  validates :tos_accepted, acceptance: true
end

哦,它是一个虚拟属性,它不需要db列。

答案 1 :(得分:1)

在UsersController中

def new
 @user = User.new({tos_accepted: true})
 # YOUR CODE GOES HERE
end

在new.html.erb

<%= f.check_box :tos_accepted %>

它会将复选框呈现为已选中。然后你需要添加模型级别的验证,如Baloo建议的那样。