2016-12-15 4 views
0

В моей app У меня есть две модели USER и ПРОФИЛЬ, я хочу, чтобы каждый пользователь должен иметь только один профиль, я попытался has_one :profile ассоциацию, но это не похоже на работу так, как я хочу.Как остановить пользователя от создания нескольких профилей?

Моя модель пользователя

class User < ActiveRecord::Base 
    has_one :profile 
    def self.from_omniauth(auth) 
    where(provider: auth.provider, uid: auth.uid).first_or_create do |user| 
     user.provider = auth.provider 
     user.uid = auth.uid 
     user.name = auth.info.name 
     user.email = auth.info.email 
     user.image = auth.info.image 
     user.oauth_token = auth.credentials.token 
     user.oauth_expires_at = Time.at(auth.credentials.expires_at) 
     user.save! 
    end 
    end 
end 

Мой профиль Модель

class Profile < ApplicationRecord 
    belongs_to :user 
end 
+0

В каком виде вы хотите? –

+0

yo может отключить форму создания профиля, если у пользователя уже есть профиль или вы можете проверить, существует ли профиль пользователя для создания профиля. – inye

+0

Как ваши пользователи создают профиль? Если он проходит через форму, я бы отключил или не показывал форму, если пользователь уже имеет один профиль. –

ответ

0

Я не знаю, как вы сохраняете информацию о профиле, но вы могли бы сделать что-то подобное в вашей профиль create метод контроллера (обратите внимание, я не тестировал это, но должен работать):

def create 
    @profile = user.profile || user.build_profile 

    if @profile.update(profile_params) 
    # success 
    else 
    # fail 
    end 
end 

Приведенное выше будет обновлять существующий профиль, если пользователь имеет его, и в противном случае он будет создавать новый.

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

  • Нет связанных вопросов^_^