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

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

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

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

Ruby on Rails 4

Ruby on Rails4はRubyによって書かれたオープンソースのウェブフレームワークです。 Ruby on Railsは「設定より規約」の原則に従っており、効率的に作業を行うために再開発を行う必要をなくしてくれます。

Q&A

0回答

1839閲覧

rails 4.2から5.0に変更したらエラーが出るようになりました。

TakumaN

総合スコア120

Ruby on Rails

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

Ruby on Rails 4

Ruby on Rails4はRubyによって書かれたオープンソースのウェブフレームワークです。 Ruby on Railsは「設定より規約」の原則に従っており、効率的に作業を行うために再開発を行う必要をなくしてくれます。

0グッド

1クリップ

投稿2016/08/26 11:20

編集2016/08/26 11:22

今まで[Rails] deviseの使い方を参考にして、rails 4.2でdeviseのセッティングをしていました。

そして、rails 5.0に変更したところ、以前と同じコードを書くと下記のエラーが出るようになりました。

おそらくrailsのバージョンアップによって仕様が変更されたためだと思うのですが、どのように書き直せばよいでしょうか?

##エラー内容

rails

1ArgumentError in Devise::RegistrationsController#new 2 3wrong number of arguments (given 2, expected 0..1) 4 5def self.new_with_session(params, session) 6 if session["devise.user_attributes"] 7 new(session["devise.user_attributes"], without_protection: true) do |user| 8 user.attributes = params 9 user.valid? 10 end

コードはリンク先と全く同じですが、念のため下に二つ載せておきます。
あと一番下に試したことを書きました!

###app/controllers/omniauth_callbacks_controller.rb

rails

1class OmniauthCallbacksController < Devise::OmniauthCallbacksController 2 def twitter 3 @user = User.from_omniauth(request.env["omniauth.auth"].except("extra")) 4 5 if @user.persisted? 6 flash.notice = "ログインしました!" 7 sign_in_and_redirect @user 8 else 9 session["devise.user_attributes"] = @user.attributes 10 redirect_to new_user_registration_url 11 end 12 end 13end

###app/models/user.rb

rails

1class User < ActiveRecord::Base 2 # Include default devise modules. Others available are: 3 # :confirmable, :lockable, :timeoutable and :omniauthable 4 devise :database_authenticatable, :registerable, 5 :recoverable, :rememberable, :trackable, :validatable, 6 :confirmable, :lockable, :timeoutable, :omniauthable, omniauth_providers: [:twitter] 7 8 def self.from_omniauth(auth) 9 where(provider: auth["provider"], uid: auth["uid"]).first_or_create do |user| 10 user.provider = auth["provider"] 11 user.uid = auth["uid"] 12 user.username = auth["info"]["nickname"] 13 end 14 end 15 16 def self.new_with_session(params, session) 17 if session["devise.user_attributes"] 18 new(session["devise.user_attributes"], without_protection: true) do |user| 19 user.attributes = params 20 user.valid? 21 end 22 else 23 super 24 end 25 end 26end

###試したこと
http://stackoverflow.com/questions/17105112/argumenterror-in-deviseregistrationscontrollernew-wrong-number-of-argumentsを参考にして、Userモデル内のnew(session["devise.user_attributes"], without_protection: true) do |user|を

rails

1new session["devise.user_attributes"] do |user|

としたところ、sign_upページはちゃんと表示されるようになったが、常時(一度もsubmitを押していないのに)エラーメッセージが出てしまう。(rails 4.2ではこんなことなかった)

rails

1<%= f.text_field :name %> 2<span class="error"><%= @user.errors.messages[:name][0] %></span> 3 4#初めてsign_upページを訪れた時にもpresenceがfalseの時のエラーメッセージが表示されてしまう。

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

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

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

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

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

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問