Rails: добавление параметров в регистрационную форму Devise с помощью переключателей - PullRequest
1 голос
/ 02 августа 2011

Чтобы включить разные роли для пользователей, я добавил несколько ролей в модель Пользователь

# 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") и пометить логическое поле в записи как 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]) …

Запись не будет получать новые параметры, что не так?спасибо

РЕДАКТИРОВАТЬ

Так что нет : роль запись, просто : хост и : компания как логические поля в БД.Кто-нибудь?

Ответы [ 2 ]

2 голосов
/ 14 августа 2012

Я уверен, что вы уже решили это, но я думаю, что функции 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], как обычно, на ваш взгляд, и дополнительный код контроллера не требуется.

0 голосов
/ 02 августа 2011

Убедитесь, что имя переключателей установлено на: 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 %>

Добавьте поля host и companyк списку attr_accessible на пользовательской модели, например:

attr_accessible :host, :company
...