0

ユーザー認証には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_iduser_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

どうすれば修正できますか?

4

0 に答える 0