控制器规范未知关键字:id

70

我有一个简单的展示动作

def show
  @field = Field.find_by(params[:id])
end

我想为此编写规范。

require 'spec_helper'

RSpec.describe FieldsController, type: :controller do

    let(:field) { create(:field) }

  it 'should show field' do
    get :show, id: field
    expect(response.status).to eq(200)
  end
end

但是我遇到了一个错误

Failure/Error: get :show, id: field

 ArgumentError:
   unknown keyword: id

如何修复?


3
这是Rails 4的语法。在Rails 5及以上版本中,您需要指定"params"关键字。 - Andrew Koster
1个回答

191

HTTP请求方法仅接受以下关键字参数: params,headers,env,xhr,format

根据新的API,您应该在此情况下使用关键字参数params

  it 'should show field' do
    get :show, params: { id: field.id }
    expect(response.status).to eq(200)
  end

14
我在将Rails版本从4.2升级到5.1后出现了这个错误,根据这个方法解决了问题 - 谢谢! - mahi-man
7
救命稻草 :) 但是这个新API在哪里定义的?我发现这个提到的链接,但如果您知道,看到这个改变发生的时间、地点和原因会更好。 - starfry
1
但是在Rails 6中,我得到了“没有匹配路由”的错误。 - Humayun Naseer

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接