0

私は自分のアプリでこのロジックを使用しています: コントローラー

@current_user = User.find_or_create_from_oauth(auth_hash)

user.rb

  def self.find_or_create_from_oauth(auth_hash)
    provider = auth_hash["provider"]
    uid = auth_hash["uid"].to_s

    case provider      
       when 'twitter'
        if user = self.find_by_twitter_uid(uid)
          return user
        else
          return self.create_user_from_twitter(auth_hash)
        end

    end
  end

  def self.create_user_from_twitter(auth_hash)   
    a = self.create({
      :twitter_uid => auth_hash["uid"],
      :name => auth_hash["info"]["name"]
    })
    puts a.inspect
    user = User.find_by_twitter_uid(a.twitter_uid)
    puts '---'
    puts user.inspect
  end

self.createこの行を実行する必要がある直後:

Assignment.create(:user_id => a.id, :role_id => 2)

問題は、行が次のputs user.inspectようなものを返すことです。

#<User id: nil, name: "...name...", twitter_uid: "96580821", provider: "twitter", created_at: nil, updated_at: nil>

返されるハッシュにid: nilがあるのはなぜですか?

または、最後に作成されたレコードの ID を取得する方法はありますか?

4

1 に答える 1

0

ユーザーが正しく保存されている場合は、次を直接使用できますa

a.assignments.create(:role_id => 2)

それ以外の場合 (create!の代わりに使用を確認create)、検証エラーが発生する可能性があります。

于 2012-09-30T20:39:26.610 に答える