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 %>