Rails redirect_to使用Ruby 2.2 / Rails 4.2的新行为?

时间:2015-02-11 16:14:02

标签: ruby-on-rails ruby-on-rails-4

尝试从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
  ...

我没有在Rails升级指南中找到有关redirect_to函数的任何内容。欢迎您的帮助! 谢谢!

2 个答案:

答案 0 :(得分:2)

我在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方法在我的测试中按预期工作。

答案 1 :(得分:1)

我查看了我的宝石版本,实际上我错过了一些。 我已经更新到最新版本,已经安装了宝石:

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

这解决了这个问题。

致以最诚挚的问候,

佛瑞德