ユーザー モデルからプロファイル情報を取得しようとしています。現在、私は Omniauth (twitter & facebook) を使用してユーザーを作成し、すべての情報をユーザー テーブルに書き込むだけです...これはうまく機能しますが、Rails の適切な規則はユーザーとプロファイルを分離することであると言われました。
数日間の試行錯誤の後、Omniauth ハッシュからのユーザー情報を使用してプロファイルを作成しているときに、has_one 関係を機能させるのに問題が発生しました。
ユーザーが作成される前に before_filter を使用して自動的にプロファイルを作成しようとしましたが、これによりプロファイルテーブルに user_id 外部キーが適切に作成されますが、omniauth ハッシュデータを書き込むことができないようです。
私のセッションコントローラー:
def create
auth = request.env["omniauth.auth"]
if user = User.find_by_provider_and_uid(auth["provider"], auth["uid"])
redirect_to root_url, :notice => 'Signed In'
else
user = User.create_with_omniauth(auth)
redirect_to profile_path(user), :notice => 'Please verify your profile'
end
私のユーザーモデルでは:
before_create :create_profile
def self.create_profile(auth)
create! do |profile|
profile.user_id = session[:user_id]
profile.name = auth["info"]["name"]
profile.email = auth["info"]["email"]
profile.nickname = auth["info"]["nickname"]
profile.location = auth["info"]["location"]
profile.image = auth["info"]["image"]
end
end
...
私が試したもう1つのオプションは、プロファイルモデルを使用してプロファイルデータを書き込むことでした...これはOmniauthハッシュデータで機能しますが、正しいuser_idを書きません(したがって外部キーはありません)
profile.rb
def self.create_profile_with_omniauth(auth)
create! do |profile|
profile.user_id = session[:user_id]
profile.name = auth["info"]["name"]
profile.email = auth["info"]["email"]
profile.nickname = auth["info"]["nickname"]
profile.location = auth["info"]["location"]
profile.image = auth["info"]["image"]
end
end