質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Ruby on Rails 5

Ruby on Rails 5は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

SNS

SNS(ソーシャル・ネットワーキング・サービス)は、 人と人とのつながりを促進したり、サポートしたりすることが可能なコミュニティ型のWebサービスです。

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

Q&A

0回答

540閲覧

OmniauthのSNS認証機能でサムネイルを取得したい

d.omg12

総合スコア2

Ruby on Rails 5

Ruby on Rails 5は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

SNS

SNS(ソーシャル・ネットワーキング・サービス)は、 人と人とのつながりを促進したり、サポートしたりすることが可能なコミュニティ型のWebサービスです。

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

0グッド

0クリップ

投稿2020/07/20 07:23

編集2020/07/21 08:19

OmniauthのSNS認証(FB, google, twitter)機能でサムネイルを取得したい

railsでアプリを作成しており、SNS認証実装いたしました。
実装は出来ましたが、画像を取得する事を忘れており記述をしたものの、うまく出来ずアドバイス頂けると幸いです。

発生している問題・エラーメッセージ

ArgumentError in Users#show Nil location provided. Can't build URI.

エラー箇所

ruby

1<%= image_tag @user.image, class: "round-img" %>

paramsの中身がNilとなってしまいます。
gem等は使用しておりません。

これまでの実装の経緯

1.関連しているモデルとしてuser modelとsns_credidential modelがあります。

ruby

1 create_table "sns_credentials", options: "ENGINE=InnoDB DEFAULT CHARSET=utf8", force: :cascade do |t| 2 t.string "provider" 3 t.string "uid" 4 t.bigint "user_id" 5 t.datetime "created_at", null: false 6 t.datetime "updated_at", null: false 7 t.index ["user_id"], name: "index_sns_credentials_on_user_id" 8 end 9 10 create_table "users", options: "ENGINE=InnoDB DEFAULT CHARSET=utf8", force: :cascade do |t| 11 t.string "email", default: "", null: false 12 t.string "encrypted_password", default: "", null: false 13 t.string "reset_password_token" 14 t.datetime "reset_password_sent_at" 15 t.datetime "remember_created_at" 16 t.datetime "created_at", null: false 17 t.datetime "updated_at", null: false 18 t.string "name" 19 t.string "image" 20 t.index ["email"], name: "index_users_on_email", unique: true 21 t.index ["reset_password_token"], name: "index_users_on_reset_password_token", unique: true 22 end 23 24 add_foreign_key "sns_credentials", "users" 25end 26

2.users_controller確認

ruby

1class UsersController < ApplicationController 2 def show 3 @user = User.find(params[:id]) 4 end 5end

3.model/user.rbのself.from_omniauth(auth)メソッドに追記

ruby

1def self.from_omniauth(auth) 2 sns = SnsCredential.where(provider: auth.provider, uid: auth.uid).first_or_create 3 user = sns.user || User.where(email: auth.info.email).first_or_initialize( 4 name: auth.info.name, 5 email: auth.info.email, 6 image: auth.info.image #←追記箇所です 7 ) 8 if user.persisted? 9 sns.user = user 10 sns.save 11 end 12 { user: user, sns: sns } 13 end

4.omniauth_callbacks_controller

ruby

1class Users::OmniauthCallbacksController < Devise::OmniauthCallbacksController 2 def facebook 3 authorization 4 end 5 6 def google_oauth2 7 authorization 8 end 9 10 def twitter 11 authorization 12 end 13 14 def failure 15 redirect_to root_path 16 end 17 18 private 19 20 def authorization 21 sns_info = User.from_omniauth(request.env["omniauth.auth"]) 22 @user = sns_info[:user] 23 24 if @user.persisted? 25 sign_in_and_redirect @user, event: :authentication 26 else 27 @sns_id = sns_info[:sns].id 28 render template: 'devise/registrations/new' 29 end 30 end 31end

試したこと

以前も別アプリで、他のモデルのデータを引っ張る事に苦労した際、
アソシエーションやモデルの表記等の見直しで直す事が出来たため見直しをしましたが、ちょっと分からずアドバイスをお願いしたいです。

よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問