Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 未定义的局部变量或方法'params';控制器_Ruby On Rails_Ruby_Ruby On Rails 3_Ruby On Rails 4 - Fatal编程技术网

Ruby on rails 未定义的局部变量或方法'params';控制器

Ruby on rails 未定义的局部变量或方法'params';控制器,ruby-on-rails,ruby,ruby-on-rails-3,ruby-on-rails-4,Ruby On Rails,Ruby,Ruby On Rails 3,Ruby On Rails 4,我正在尝试用rails实现联系人管理器。我正在使用RSpec进行测试驱动的开发 当我查看一个人的页面时,我单击一个添加链接,将我带到输入电话号码的页面。单击“保存”,然后我会看到此人及其更新的信息 我正在尝试验证此操作 在我的控制器类中 describe "POST #create" do context "with valid params" do let(:alice) { Person.create(first_name: 'Alice', last_name: 'Smith') }

我正在尝试用rails实现联系人管理器。我正在使用RSpec进行测试驱动的开发

当我查看一个人的页面时,我单击一个添加链接,将我带到输入电话号码的页面。单击“保存”,然后我会看到此人及其更新的信息

我正在尝试验证此操作

在我的控制器类中

describe "POST #create" do
context "with valid params" do
  let(:alice) { Person.create(first_name: 'Alice', last_name: 'Smith') }
  let(:valid_attributes) { {number: '555-1234', person_id: alice.id} }

  it "creates a new PhoneNumber" do
    expect {
      post :create, params: {phone_number: valid_attributes}, session: valid_session
    }.to change(PhoneNumber, :count).by(1)
  end

  it "redirects to the phone number's person" do
    post :create, params: {:phone_number => valid_attributes}, session: valid_session
    @phone_number = PhoneNumber.new(person_id: params[:person_id])
    expect(response).to redirect_to(@phone_number.person)
  end
end
我想重定向到电话号码的人,但在获取电话号码时 它为#

我还有如下视图测试

 it 'adds a new phone number' do
  page.click_link('Add phone number')
  page.fill_in('Number', with: '555-8888')
  page.click_button('Create Phone number')
  expect(current_path).to eq(person_path(person))
  expect(page).to have_content('555-8888')
end
目前,由于以下错误,此测试也失败:

expected: "/people/1"
got: "/phone_numbers"

如何解决这些问题并根据需要重定向用户?提前感谢

在您的测试中没有
params
这样的东西

而不是

@phone_number = PhoneNumber.new(person_id: params[:person_id])
……你可以

@phone_number = PhoneNumber.new(person_id: valid_attributes[:person_id])
但是,由于您只是测试您是否重定向到此人,您可以完全删除上面的行并执行以下操作

expect(response).to redirect_to(alice)

测试中没有
params
这样的东西

而不是

@phone_number = PhoneNumber.new(person_id: params[:person_id])
……你可以

@phone_number = PhoneNumber.new(person_id: valid_attributes[:person_id])
但是,由于您只是测试您是否重定向到此人,您可以完全删除上面的行并执行以下操作

expect(response).to redirect_to(alice)

错误与它所说的有关,在执行
@phone\u number=PhoneNumber.new(person\u id:params[:person\u id])
语句的
rspec
中既没有局部变量也没有方法。错误与它所说的有关,您在执行
@phone\u number=PhoneNumber.new(person\u id:params[:person\u id])
语句的
rspec
中既没有局部变量也没有方法。嘿,谢谢您的回答。我尝试了您指出的代码,但是,我得到了如下错误:
Expected”http://test.host/people/1“未来==”http://test.host/phone_numbers/1“
这意味着您的控制器没有重定向到此人,而是重定向到电话号码记录。可以吗?如果是这样,您需要将文本更改为
expect(response)。若要将_重定向到(assigns(:phone_number))
,这是访问控制器实例变量的方式<代码>在测试中分配(:phone_number)的变量与控制器中的
@phone_number
的变量相同。如果不正常(即控制器应重定向到个人记录),恭喜,您的测试发现代码中有问题!谢谢,我有主意了!嘿,谢谢你的回答。我尝试了您指出的代码,但是,我得到了如下错误:
Expected”http://test.host/people/1“未来==”http://test.host/phone_numbers/1“
这意味着您的控制器没有重定向到此人,而是重定向到电话号码记录。可以吗?如果是这样,您需要将文本更改为
expect(response)。若要将_重定向到(assigns(:phone_number))
,这是访问控制器实例变量的方式<代码>在测试中分配(:phone_number)的变量与控制器中的
@phone_number
的变量相同。如果不正常(即控制器应重定向到个人记录),恭喜,您的测试发现代码中有问题!谢谢,我有主意了!