Rails redirect_to使用Ruby 2.2 / Rails 4.2的新行为?
尝试从Ruby 2.0 / Rails 4.0升级到Ruby 2.2 / Rails 4.2,登录我的应用程序时遇到了一个令人惊讶的错误(基于M. Hartl的Rails Tutorial):
Controller: SessionsController#create Instruction: redirect_to root_url Error message: wrong number of arguments (2 for 1)
这是会话控制器:
class SessionsController < ApplicationController def new end def create user = User.find_by_login(params[:session][:login]) if user && user.authenticate(params[:session][:password]) sign_in user redirect_to root_url else flash.now[:error] = 'Invalid login/password combination' render 'new' end end def destroy sign_out redirect_to root_url end end
这是路线文件:
ODQStairs::Application.routes.draw do resources :requests #static pages get '/help', to: "static_pages#help" get '/about', to: "static_pages#about" get '/contact', to: "static_pages#contact" #root definition root to: "dashboards#home" #routes resources :sessions, only: [:new, :create, :destroy] get '/signin', to: 'sessions#new' , via: :get match '/signout', to: 'sessions#destroy', via: :delete resources :parameters_lists do resources :parameters end ...
关于redirect_to函数,我没有在Rails升级指南中找到任何内容。 欢迎您的帮助! 谢谢!
我在Rails 4.0到4.2升级的RSpec测试中遇到了同样的问题,并确定它与turbolinks有关。 我的Gemfile.lock有:
turbolinks (1.3.0)
我将我的Gemfile中的turbolinks依赖行更改为
gem 'turbolinks', '~> 2.5'
然后我使用以下bundler命令升级了gem:
bundle update --source turbolinks
它将我的turbolinks版本升级到最新版本,现在redirect_to方法在我的测试中按预期工作。
我看了一下我的gem版本,实际上我错过了一些。 我已经更新到最新版本,已经安装了gem:
Installing websocket 1.2.1 Installing selenium-webdriver 2.44.0 Installing bootstrap-will_paginate 0.0.10 Installing sass 3.4.12 Installing annotate 2.6.5 Installing globalid 0.3.3
这解决了这个问题。
最好的祝福,
弗雷德