Я нахожусь в той же ситуации, что и вы, после того, как попробовал все виды подходов, я использовал одну модель User, которая бы относилась к полиморфным ролям. Это кажется самым простым способом достижения единого входа.
Модель User будет содержать информацию, относящуюся только к входу в систему.
Ролевая модель будет хранить поля, специфичные для каждой роли, а также другие ассоциации, специфичные для этой роли.
Новые регистрации будут настраиваться для каждого типа пользователя (роли) через отдельные контроллеры, а затем создавать вложенные атрибуты для пользователя.
class User < ActiveRecord::Base
#... devise code ...
belongs_to :role, :polymorphic => true
end
class Member < ActiveRecord::Base
attr_accessible :name, :tel, :city #etc etc....
attr_accessible :user_attributes #this is needed for nested attributes assignment
#model specific associations like
has_many :resumes
has_one :user, :as => :role, dependent: :destroy
accepts_nested_attributes_for :user
end
Маршруты - просто обычные вещи для модели Member.
resources :members
#maybe make a new path for New signups, but for now its new_member_path
Контроллер - вам нужно build_user для вложенных атрибутов
#controllers/members_controller.rb
def new
@member = Member.new
@member.build_user
end
def create
#... standard controller stuff
end
Вид / Участники / new.html.erb
<h2>Sign up for new members!</h2>
<%= simple_form_for @member do |f| %>
# user fields
<%= f.fields_for :user do |u| %>
<%= u.input :email, :required => true, :autofocus => true %>
<%= u.input :password, :required => true %>
<%= u.input :password_confirmation, :required => true %>
<% end %>
# member fields
<%= f.input :name %>
<%= f.input :tel %>
<%= f.input :city %>
<%= f.button :submit, "Sign up" %>
<% end %>
Я хотел бы отметить, что НЕТ НЕОБХОДИМОСТИ для достижения гема nested_form; поскольку требование состоит в том, что пользователь может принадлежать только к одному типу роли.