2010-11-29 7 views
3

Я хочу переопределить Devise's RegistrationsContollers 'создать действие так, чтобы, когда пользователь подписывается, я могу связать модель UserProfile с этим пользователем.Как добавить UserProfile пользователю при регистрации пользователя? (Devise, Rails 3)

Итак, следуя инструкциям в DEViSE Readme, я переопределить действие:

#File app/controllers/registrations_controller.rb:  
class Users::RegistrationsController < Devise::RegistrationsController 
    def create 
    # some code here.. 
    self.user_profiles.build #Error (no method `user_profiles`) 
    current_user.user_profiles.build #Error (current_user is nil) 
    some other way??? 
    end 
end 

#File routes.rb: 
devise_for :users, :controllers => { :registrations => 'users/registrations' } 

Разрабатывают создает запись в таблице users, но как я могу связать UserProfile с этой записью?

Я пробовал искать, но я просто не могу заставить это работать! Буду признателен за любую оказанную помощь.

(я в настоящее время используют Завещание 1.1.5 на рельсы 3.0.3)

решенных:

Добавление раствора в пользу других:

#File app/controllers/registrations_controller.rb:  
class Users::RegistrationsController < Devise::RegistrationsController 
    def create 
    super 
    @user.build_user_profile 
    @user.user_profile.some_data = 'abcd' 
    @user.save! 
    end 
end 

ответ

3

self относится к contoller не модель в этом контексте.

Кроме того, имеет ли пользовательская модель много UserProfiles? В противном случае, если они этого не делают (то есть у них есть только один), то вы должны использовать @user.build_user_profile, не @user.user_profiles.build

Я также рекомендую делать это на уровне модели, а не на уровне контроллера, используя функцию обратного вызова, такие как before_create или after_create, то есть:

class User < AR 
    has_one :user_profile 

    after_create :build_profile 

    def build_profile 
     self.build_user_profile 
     ... 
    end 
end 
+0

Спасибо! который работает (@ user.build_user_profile). Кроме того, мне нужно создать профиль в контроллере (а не в модели), потому что требуется некоторая информация от пользователя во время регистрации (например, адрес). – Zabba 2010-11-29 19:24:39

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