Rails:通过单选按钮将Params添加到Devise注册表单中

时间:2011-08-02 14:13:29

标签: ruby-on-rails parameters controller devise radio-button

要为用户启用不同的角色,我在用户模型中添加了一些角色......

# 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中的布尔字段。任何人吗?

2 个答案:

答案 0 :(得分:2)

我相信你现在已经解决了这个问题,但我认为attr_accessorbefore_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