2010-11-12 3 views
2

Я новичок в rails (rails 3), и я учусь на практике.Rails, Mongoid, Devise Профили пользователей

Я хочу создать отношение профиля пользователя. Я создал модель User с разработкой, и это работает хорошо. Затем я создал модель профиля. Идея состоит в том, чтобы зарегистрировать пользователя и показать информацию о его профиле, и если пользователь хочет, заполните профиль.

Но профиль связан с сообщениями. Поэтому мне нужно создать пустой профиль с действием регистра пользователя.

Как я могу это сделать?

Моя идея - изменить метод createController # для создания пустого профиля, но я не знаю, как это сделать.

Мои модели

class User 
    include Mongoid::Document 
    devise :database_authenticatable, :registerable, :token_authenticable,   
      :omniauthable, 
      :recoverable, :rememberable, :trackable, :validatable 
    field :username 
    key :username 
    embeds_one :profile 
    attr_accessible :username,:password,:password_confirmation,:remember_me 

class Profile 
    include Mongoid::Document 
    field :name 
    field :lastname 
    ... 
    ... 
    embedded_in :user, :inverse_of => :profiles 
    referenced_many :posts 

Некоторые идеи?

ответ

2

Похоже, что вы только встраиваете один профиль (embeds_one: profile). Это должен быть user.profile, а не user.profiles. Кроме того, user.profile вернет экземпляр этого документа, а не массив из многих документов.

Вы можете сделать что-то подобное в своем контроллере.

user.profile.create(... put any params here ...) 

на ваш взгляд, вы бы затем отобразить

<h2>Welcome <%[email protected] %></h2> 

Кроме того, необходимо изменить

embedded_in :user, :inverse_of => :profiles 

в

embedded_in :user, :inverse_of => :profile 

Чтобы увидеть, если пользователь имеет профиль или не, просто посмотрите, возвращает ли user.profile значение nil.

+0

Спасибо ... теперь проблема заключается в следующем: я не буду создавать профиль в момент регистрации нового пользователя .. для этого мне нужно изменить способ создания пользовательского метода? ... – matiasfh

+0

Просто позвоните user.profile.create (: name => 'whatever',: lastname => 'whatever2') после того, как вы создали пользователя. –

+0

Не могли бы вы отметить это как ответ? –