2013-10-10 2 views
2

Так что в основном я написал свою собственную проверку подлинности вместо использования драгоценного камня, поэтому у меня есть доступ к контроллерам. Мое создание пользователей прекрасно работает, но когда мои пользователи созданы, я хочу также создать запись профиля для них в моей модели профиля. У меня это в основном работает, я просто не могу передать идентификатор от нового пользователя в новый profile.user_id. Вот мой код для создания пользователя в моей модели пользователя.Ruby on Rails - создание профиля при создании пользователя

Профиль создает его просто не добавляет user_id от вновь созданного пользователя. Если кто-то может помочь, это будет оценено по достоинству.

ответ

11

Вы действительно должны сделать это в качестве обратного вызова в модели пользователя:

User 
    after_create :build_profile 

    def build_profile 
    Profile.create(user: self) # Associations must be defined correctly for this syntax, avoids using ID's directly. 
    end 
end 

Это теперь всегда будет создать профиль для вновь созданного пользователя.

Ваш контроллер затем получает упрощено до:

def create 
    @user = User.new(user_params) 
    if @user.save 
    redirect_to root_url, :notice => "You have succesfully signed up!" 
    else 
    render "new" 
    end 
end 
+0

Хорошая идея. Я думаю, вы предлагаете _User has_one Profile_. Правильно? Мне нужно создать контроллер профиля? –

0

У вас есть две ошибки здесь:

@profile = Profile.create 
profile.user_id = @user.id 

Вторая линия должна быть:

@profile.user_id = @user.id 

Первая строка создает профиль и ваш не «повторно экономии» после назначения из user_id.

Изменить эти линии к этому:

@profile = Profile.create(user_id: @user.id) 
+0

Могу ли я добавить дополнительное поле в профиль, например profile.email = user.email –

9

Это сейчас в Rails гораздо проще 4.

Вам нужно всего лишь добавить следующую строку в модели пользователя:

after_create :create_profile 

Посмотрите, как рельсы автоматически создают профиль для пользователя.

+1

Ahh! сладкий ..... +1 –

+1

его удивительный ... :) –

+1

Хороший отзыв ...... – hguzman

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