我正在研究一个Rails应用程序,当用户首次使用facebook omniauth注册时,将为该用户创建一个新衣橱。仅当用户第一次注册时初始化一个类
我有两个可能的文件,我认为会工作。我将标记的地方,我觉得
@wardrobe = Wardrobe.new
@wardrobe.save!
将与“XX”
我怀疑它必须是在用户模式,当用户首先使用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?方法。尽管谢谢您的帮助! – 2014-12-07 18:15:13
我修正了一个例子。 – 2014-12-07 18:17:43
我最终采纳了你的建议。由于某种原因,我只需要在user.rb中加入'after_create:create_wardrobe'。谢谢! – 2014-12-08 02:12:07