Credo che ci sia una soluzione migliore di riscrivere il RegistrationsController. Ho fatto esattamente la stessa cosa (ho solo un'organizzazione al posto della compagnia).
Se si imposta correttamente il modulo nidificato, a livello di modello e vista, tutto funziona come un fascino.
mio modello User:
class User < ActiveRecord::Base
# Include default devise modules. Others available are:
# :token_authenticatable, :confirmable, :lockable and :timeoutable
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :trackable, :validatable
has_many :owned_organizations, :class_name => 'Organization', :foreign_key => :owner_id
has_many :organization_memberships
has_many :organizations, :through => :organization_memberships
# Setup accessible (or protected) attributes for your model
attr_accessible :email, :password, :password_confirmation, :remember_me, :name, :username, :owned_organizations_attributes
accepts_nested_attributes_for :owned_organizations
...
end
mia organizzazione Modello:
class Organization < ActiveRecord::Base
belongs_to :owner, :class_name => 'User'
has_many :organization_memberships
has_many :users, :through => :organization_memberships
has_many :contracts
attr_accessor :plan_name
after_create :set_owner_membership, :set_contract
...
end
mio punto di vista: 'ideare/iscrizioni/new.html.erb'
<h2>Sign up</h2>
<% resource.owned_organizations.build if resource.owned_organizations.empty? %>
<%= form_for(resource, :as => resource_name, :url => registration_path(resource_name)) do |f| %>
<%= devise_error_messages! %>
<p><%= f.label :name %><br />
<%= f.text_field :name %></p>
<p><%= f.label :email %><br />
<%= f.text_field :email %></p>
<p><%= f.label :username %><br />
<%= f.text_field :username %></p>
<p><%= f.label :password %><br />
<%= f.password_field :password %></p>
<p><%= f.label :password_confirmation %><br />
<%= f.password_field :password_confirmation %></p>
<%= f.fields_for :owned_organizations do |organization_form| %>
<p><%= organization_form.label :name %><br />
<%= organization_form.text_field :name %></p>
<p><%= organization_form.label :subdomain %><br />
<%= organization_form.text_field :subdomain %></p>
<%= organization_form.hidden_field :plan_name, :value => params[:plan] %>
<% end %>
<p><%= f.submit "Sign up" %></p>
<% end %>
<%= render :partial => "devise/shared/links" %>
Ma come si fa a fare in modo che escogiti gli sguardi nella directory di sviluppo per le viste? Sto provando questo, ma escogitare metodi come "sign_in_and_redirect (resource_name, resource)" stanno cercando nelle viste per il template. – AnApprentice
Se si desidera personalizzare le proprie viste di visualizzazione, è necessario solo prima di generarle e escogitare controllerà la cartella delle visualizzazioni prima di caricare le viste dalla gemma. In Rails 3 è: 'rails generate devise: views' e in Rails 2 (penso) è:' script/generate devise: views' – theTRON
l'hack sopra non funziona con devise 1.0.8 che è la versione che funziona per le rotaie 2. –