2014-11-09 1 views
2

У меня есть модель под названием «Пользователь», и я использую приложение для создания учетных записей. Когда какой-то пользователь подписывается, ему предлагается вставить адрес электронной почты и пароль, после чего я хочу перенаправить страницу в форму создания пользователя, где пользователь будет вставлять больше деталей, таких как имя, возраст и т. Д. ... И пользователь model будет иметь поле account_id, которое будет инициализировано current_account.id при создании. Я хотел бы знать, что это лучший способ сделать это.Как я могу связать пользователя с учетной записью с помощью программы?

ответ

2

У меня был бы user_id в классе Account, поэтому учетная запись принадлежит Пользователю, а не наоборот. Это для ассоциаций, чтобы иметь больше смысла, так как:

моделей/user.rb

class User 
    has_one :account 

модели/account.rb

class Account 
    belongs_to :user 

Убедитесь, что вы генерировать миграция для добавления user_id в таблицу учетных записей!

Затем вам необходимо переопределить контроллер регистрации разработки. Сначала мы редактируем маршруты - вы увидите, что я также включил: account в качестве вложенного ресурса (единственного числа). Таким образом, URL-адрес будет лучше, например/пользователей/6/счет/редактировать

конфигурации/routes.rb

devise_for :users, :controllers => {:registrations => "registrations"} 

resources :users do 
    resource :account 
end 

А затем создать контроллер. Мы рассмотрим два метода здесь: действие «создать», в котором мы будем создавать учетную запись пользователей в ней. Затем нужно переопределить метод after_sign_up_path_for для перенаправления на страницу редактирования учетной записи. ** Примечание. Это предназначено для разработки 3.0.3. Если вы используете другую версию, посмотрите на их github для кода регистрации.

Контроллеры/registrations_controller.rb

class RegistrationsController < Devise::RegistrationsController 

    def create 
    build_resource(sign_up_params) 

    if resource.save 
     resource.build_account(:user_id => resource.id) # code to create account 
     if resource.active_for_authentication? 
     set_flash_message :notice, :signed_up if is_navigational_format? 
     sign_up(resource_name, resource) 
     respond_with resource, :location => after_sign_up_path_for(resource) 
     else 
     set_flash_message :notice, :"signed_up_but_#{resource.inactive_message}" if is_navigational_format? 
     expire_session_data_after_sign_in! 
     respond_with resource, :location => after_inactive_sign_up_path_for(resource) 
     end 
    else 
     clean_up_passwords resource 
     respond_with resource 
    end 
    end 

    protected 

    # override the after signup path to your desired route, e.g 
    def after_sign_up_path_for(resource) 
    edit_user_account_path(resource.id) 
    end 
end 
+0

Я просто играл с этим на месте, и они были некоторые незначительные ошибки и упущения. Я обновил свой ответ с помощью проверенного кода. – RichardAE

+0

Большое спасибо! – pMpC

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