要为用户启用不同的角色,我在用户模型中添加了一些角色......
# class AddRolesToUser < ActiveRecord::Migration
add_column :users, :host, :boolean, :default => false
add_column :users, :company, :boolean, :default => false
并扩展了注册表格:
<%= radio_button_tag(:role, "host") %>
<%= label_tag(:role, "Host") %>
<%= radio_button_tag(:role, "company") %>
<%= label_tag(:role, "Company") %>
然后,在UsersController中,我想检查 role 的参数(例如“host”)并将记录中的boolean字段标记为 true :
# users_controller.rb
if params[:role] == "host"
params[:user][:host] = true
elsif params[:role] == "company"
params[:user][:company] = true
end
@user = User.new(params[:user]) …
记录不会获取新的参数,出了什么问题?感谢
修改
所以 没有:role 记录,只有:host 和:company 作为db中的布尔字段。任何人吗?
答案 0 :(得分:2)
我相信你现在已经解决了这个问题,但我认为attr_accessor
和before_validation
函数是最好的解决方案。
在User
模型中添加:
attr_accessor :role
before_validation :assign_roles
def assign_roles
self.host = (role == "host")
self.company = (role == "company")
end
然后您可以像往常一样在视图中添加:user[:role]
字段,并且不需要额外的控制器代码。
答案 1 :(得分:0)
确保单选按钮的名称设置为:user [host]
而不是radio_button_tag使用这样的东西:
<%= form_for(resource, :as => resource_name, :url => registration_path(resource_name)) do |f| %>
<%= devise_error_messages! %>
<%= f.radio_button :role, "host" %> Host
<%= f.radio_button :role, "company" %> Company
<%= f.submit "Sign up" %>
<% end %>
将主机和公司字段添加到用户模型上的attr_accessible列表中,如下所示:
attr_accessible :host, :company