ユーザー認証にはAuthlogic、ソーシャル認証にはOmniauthを使用しています。Facebookにサインアップしたユーザーの新しいアカウントを作成した後、システムで彼の役割を設定したいと思います。
ユーザーモデル
def self.create_user_from_facebook(auth_hash)
a = self.create!({
:facebook_uid => auth_hash["uid"],
...,
:crypted_password => "facebook",
:password_salt => "facebook",
:persistence_token => "facebook",
:provider => auth_hash["provider"]
})
puts a.errors.inspect #returns no errors, record is successfully saved
puts a.inspect # returns: last_request_at: "2012-10-01 08:12:51"
Assignment.create(:user_id => user.id, :role_id => 2)
end
assignments
この方法で新しいレコードをテーブルに追加しようとすると、エラーが発生します
undefined method `last_request_at' for #<Assignment:0x0000012a1539e0>
列last_request_at
は表にありますusers
。
last_request_at
テーブルの列はテーブルとどのようにusers
関連していますassignments
か? (次の 2 つの列のみ: role_id
、user_id
)?
**EDIT** another information:
class UserOauthController < ApplicationController
def create
@current_user = User.find_or_create_from_oauth(auth_hash)
if current_user
UserSession.create(current_user, true)
flash[:success] = 'Successfully logged in.'
redirect_to root_url
else
flash[:warning] = 'Authorization ERROR! Please, try it again.'
redirect_to root_url
end
end
end
class User < ActiveRecord::Base
attr_accessible list of atteibutes
acts_as_authentic do |c|
authlogic set up
end
...validations...
def self.find_or_create_from_oauth(auth_hash)
provider = auth_hash["provider"]
uid = auth_hash["uid"].to_s
case provider
when 'facebook'
if user = self.where('email = ? and provider = ?', auth_hash["info"]["email"], provider).first
return user
elsif user = self.find_by_facebook_uid(uid)
return user
else
return self.create_user_from_facebook(auth_hash)
end
end
def self.create_user_from_facebook(auth_hash)
a = self.create!({
:facebook_uid => auth_hash["uid"],
...,
:crypted_password => "facebook",
:password_salt => "facebook",
:persistence_token => "facebook",
:provider => auth_hash["provider"]
})
puts a.errors.inspect
puts a.inspect
a.assignments.create(:role_id => MEMBER)
end
end
どうすれば修正できますか?