【问题标题】:wrong number of arguments (2 for 1) on devise upgrade设计升级时参数数量错误(2 比 1)
【发布时间】:2015-03-18 21:36:32
【问题描述】:

尝试从 Rails 4.1 升级到 rails 4.2 并在此过程中从 3.0 设计到 3.4(由于 3.0 的依赖性)

我有一个非常基本的控制器:

class BasicController < ActionController::Base
  #purposely not inherited from Application Controller to try and isolate the issue

  before_filter :authenticate_user!

  def index
  end

end

routes.rb 包含:

get 'basic/index'

我对这个控制器的规格是:

#purposely not included spec_helper as I don't want to complicate things.
1.describe BasicController do
2.  it "should be able to get index" do
3.    @request.env['devise.mapping'] = Devise.mappings[:user]
4.    @current_user = FactoryGirl.create(:user)
5.    sign_in :user, @current_user #Also tried sign_in @current_user
6.    get :index
7.    response.should be_success
8.  end 
9.end

此规范与 ArgumentError: wrong number of arguments (2 for 1) #./spec/controllers/basic_controller_spec.rb:6 错误

使用 devise 3.4.1 和 rails 4.2.0

如果我用简单的 User.create(....) 替换工厂女孩,错误仍然会发生。

任何想法为什么会发生这种情况?

【问题讨论】:

    标签: ruby-on-rails devise ruby-on-rails-4.2


    【解决方案1】:

    而不是signin :user, @current_user 使用

    sign_in @current_user
    

    【讨论】:

    • 我试过这个。同样的错误。它不是在这一行失败,而是在之后的那一行失败。
    【解决方案2】:

    您是否偶然使用了 Squeel?如果是这样,1.2.2 中存在问题,Rails 4.2 会导致此错误。更新到 1.2.3 为我修复了这个错误。

    具体来说,错误来自create_binds,他们已经修复了实现,请参阅https://github.com/activerecord-hackery/squeel/issues/352

    【讨论】:

      【解决方案3】:

      也许 turbolinks gem 是一个答案?

      尝试升级或禁用它。对我来说,这是错误的原因。见:Why is there a wrong number of arguments error when using redirect_to in Rails 4.2?

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-04-15
        • 1970-01-01
        • 1970-01-01
        • 2015-10-03
        相关资源
        最近更新 更多