今まで[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の時のエラーメッセージが表示されてしまう。
あなたの回答
tips
プレビュー