2011-01-07 10 views
2

Ich benutze Devise für die Benutzerregistrierung. Ich habe die ganze famous tutorial über das Anpassen von Devise gelesen, aber kann diese einfache Aufgabe nicht verstehen. Ich folgte seinem Modell (HABTM)Schienen 3: Legen Sie dem Registrierungsformular Rollen hinzufügen-Kontrollkästchen

Ich möchte ein Rollen Kontrollkästchen dem Devise Bearbeitungsformular hinzufügen. Ich habe keinen Controller, weil Devise keinen zur Verfügung stellt, aber neue Benutzer zu einer Standardrolle hinzufügen kann. Ich konnte die Checkboxen mit den korrekten Informationen anzeigen, aber nicht bearbeiten (es werden keine Daten gespeichert). Brauche ich einen benutzerdefinierten Controller? wenn ja, wie genau? Ich bin neu in HABTM Beziehungen!

Mein Benutzermodell

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 

Meine Bearbeitungsformular (ersinnen/Anmeldungen/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 %> 

Antwort

1

Konsole überprüfen, ich war immer eine ‚Kann nicht Masse assign Fehler“ , dann habe ich: role_ids in das attr_accessible des Benutzermodells eingefügt und es hat funktioniert.