Как добавить UserProfile для пользователя, когда пользователь регистрируется? (Разработка, Rails 3) - PullRequest
3 голосов
/ 29 ноября 2010

Я хочу переопределить действие RegistrationsContollers 'Devise, чтобы при регистрации пользователя я мог связать модель UserProfile с этим пользователем.

Итак, следуя рекомендациям в Readme 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' }

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

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

(сейчас я использую Devise 1.1.5 в Rails 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

1 Ответ

3 голосов
/ 29 ноября 2010

self относится к контроллеру, а не к модели в этом контексте.

Кроме того, имеет ли пользовательская модель много пользовательских профилей?В противном случае, если они этого не делают (то есть у них есть только один), то вам следует использовать @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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...