2011-01-07 3 views
2

Я использую Devise для регистрации пользователя. Я читал все famous tutorial о настройке Devise, но не могу понять эту простую задачу. Я следовал его модели (HABTM)Rails 3: Придумайте добавить роли в регистрационную форму.

Я хочу добавить ролик в форму редактирования. У меня нет причины для контроллера. Devise не предоставляет одного, но ему удалось добавить роль по умолчанию для новых пользователей. Я смог отобразить флажки с правильной информацией, но не могу ее редактировать (он не будет сохранять anydata). Нужен ли мне специальный контроллер? если да, то как именно? Я новичок в отношениях HABTM!

Моя модель пользователя

class User < ActiveRecord::Base 
    has_and_belongs_to_many :roles 

    before_save :setup_role 

    # Include default devise modules. Others available are: 
    # :token_authenticatable, :confirmable, :lockable and :timeoutable 
    devise :database_authenticatable, :registerable, 
     :recoverable, :rememberable, :trackable, :validatable 

    # Setup accessible (or protected) attributes for your model 
    attr_accessible :email, :password, :password_confirmation, :remember_me 

    def role?(role_sym) 
    roles.any? { |r| r.name.underscore.to_sym == role_sym } 
    end 

    # Default role is "User" 
    def setup_role 
    if self.role_ids.empty?  
     self.role_ids = [3] 
    end 
    end 


end 

Моя форма редактирования (изобрести/регистрация/edit.html.rb

<h2>Edit <%= resource_name.to_s.humanize %></h2> 

<%= form_for(resource, :as => resource_name, :url => registration_path(resource_name), :html => { :method => :put }) do |f| %> 
    <%= devise_error_messages! %> 

    <p><%= f.label :email %><br /> 
    <%= f.text_field :email %></p> 

    <p><%= f.label :password %> <i>(leave blank if you don't want to change it)</i><br /> 
    <%= f.password_field :password %></p> 

    <p><%= f.label :password_confirmation %><br /> 
    <%= f.password_field :password_confirmation %></p> 

    <p><%= f.label :current_password %> <i>(we need your current password to confirm your changes)</i><br /> 
    <%= f.password_field :current_password %></p> 

    <% for role in Role.find(:all) %> 
     <div> 
      <%= check_box_tag "user[role_ids][]", role.id, @user.roles.include?(role) %> 
      <%= role.name %> 
     </div> 
    <% end %> 

    <p><%= f.submit "Update" %></p> 
<% end %> 

<h3>Cancel my account</h3> 

<p>Unhappy? <%= link_to "Cancel my account", registration_path(resource_name), :confirm => "Are you sure?", :method => :delete %>.</p> 

<%= link_to "Back", :back %> 

ответ

1

проверить вашу консоль, я получаю «Не удается массового правопреемником» ошибка , тогда я поместил: role_ids в attr_accessible пользовательской модели и работал.

Смежные вопросы