我是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;真的没有用;并且用户可以在不接受服务条款的情况下进行注册。
检查接受复选框的正确语法是什么?
答案 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建议的那样。