Я работаю над приложением Rails, которое, когда пользователь впервые подписывается на facebook omniauth, будет создан новый гардероб для этого пользователя.Инициализация класса только при первом подписании пользователем
У меня есть два возможных файла, которые, я думаю, будут работать. Я надпишу место, я думаю, что
@wardrobe = Wardrobe.new
@wardrobe.save!
будет работать с «хми»
Я подозреваю, что это должно быть в модели пользователя, когда пользователь сначала создается с помощью OmniAuth:
class User < ActiveRecord::Base
has_many :likes
has_many :outfits
has_one :wardrobe
def self.from_omniauth(auth_hash)
where(auth_hash.slice(:provider, :uid)).first_or_initialize.tap do |user|
user.provider = auth_hash.provider
user.uid = auth_hash.uid
user.name = auth_hash.info.name
user.email = auth_hash.info.email
user.image = auth_hash.info.image
user.oauth_token = auth_hash.credentials.token
user.oauth_expires_at = Time.at(auth_hash.credentials.expires_at)
user.save!
end
xx
end
конец
Я также думал о том, чтобы поместить его в контроллер сеансов, когда пользователь создает сеанс, но не создавал бы новый гардероб при каждом входе:
class SessionsController < ApplicationController
def create
@user = User.from_omniauth(env["omniauth.auth"])
xx
session[:current_user] = @user
session[:user_id] = @user.id
redirect_to wardrobe_index_path
end
def destroy
session[:user_id] = nil
redirect_to root_url
end
protected
def auth_hash
request.env['omniauth.auth']
end
end
Хотя я уверен, что это может сработать, я не знал, как реализовать new_record? метод. Спасибо за помощь! –
Я исправил пример. –
Я закончил тем, что принял ваш совет. И по какой-то причине мне нужно было только поставить 'after_create: create_wardrobe' в user.rb. Благодаря! –