Rails[RSpec]: put :update, 没有路由匹配 :id => nil
Rails[RSpec]: put :update, no route matches :id => nil
非常奇怪的错误。我正在为 subgroup
控制器编写 RSpec 测试,它与 group
处于多对一关系。 group
接受 subgroup
的嵌套属性。我使用了脚手架,并且使用了提供的测试(编辑测试)。在我开始测试 Devise 之前,这些测试都有效。现在,我使用无效参数进行更新的测试失败了。
测试在 subgroups_controller_spec.rb
let(:invalid_attributes) {
{name: nil, group_id: nil}
}
context "with invalid params" do
it "assigns the subgroup as @subgroup" do
subgroup = Subgroup.create! valid_attributes
puts "param: #{subgroup.to_param}, id: #{subgroup.id}
put :update, {:id => subgroup.to_param, :subgroup => invalid_attributes}, valid_session
expect(assigns(:subgroup)).to eq(subgroup)
end
it "re-renders the 'edit' template" do
subgroup = Subgroup.create! valid_attributes
put :update, {:id => subgroup.to_param, :subgroup => invalid_attributes}, valid_session
expect(response).to render_template("edit")
end
end
错误信息:
1) SubgroupsController PUT #update with invalid params assigns the subgroup as @subgroup
Failure/Error: put :update, {:id => subgroup.to_param, :subgroup => invalid_attributes}, valid_session
ActionView::Template::Error:
No route matches {:action=>"show", :controller=>"groups", :id=>nil, :locale=>nil}
但是 puts "param: #{subgroup.to_param}, id: #{subgroup.id}"
打印 param: 1, id: 1
很明显这些 id 不为零。
rake 路线:
subgroups GET (/:locale)/subgroups(.:format) subgroups#index
POST (/:locale)/subgroups(.:format) subgroups#create
new_subgroup GET (/:locale)/subgroups/new(.:format) subgroups#new
edit_subgroup GET (/:locale)/subgroups/:id/edit(.:format) subgroups#edit
subgroup GET (/:locale)/subgroups/:id(.:format) subgroups#show
PATCH (/:locale)/subgroups/:id(.:format) subgroups#update
PUT (/:locale)/subgroups/:id(.:format) subgroups#update
DELETE (/:locale)/subgroups/:id(.:format) subgroups#destroy
p.s。路线中列出了语言环境,但我删除了它们以便于查看。我不认为语言环境是这个问题,因为更新需要一个 :id 来更新。
问题不在于您的 put
路线,而在于它正在做的渲染。您收到模板错误,错误详情显示您正尝试在 groups
上执行 show
。检查布局中使用的路径。
非常奇怪的错误。我正在为 subgroup
控制器编写 RSpec 测试,它与 group
处于多对一关系。 group
接受 subgroup
的嵌套属性。我使用了脚手架,并且使用了提供的测试(编辑测试)。在我开始测试 Devise 之前,这些测试都有效。现在,我使用无效参数进行更新的测试失败了。
测试在 subgroups_controller_spec.rb
let(:invalid_attributes) {
{name: nil, group_id: nil}
}
context "with invalid params" do
it "assigns the subgroup as @subgroup" do
subgroup = Subgroup.create! valid_attributes
puts "param: #{subgroup.to_param}, id: #{subgroup.id}
put :update, {:id => subgroup.to_param, :subgroup => invalid_attributes}, valid_session
expect(assigns(:subgroup)).to eq(subgroup)
end
it "re-renders the 'edit' template" do
subgroup = Subgroup.create! valid_attributes
put :update, {:id => subgroup.to_param, :subgroup => invalid_attributes}, valid_session
expect(response).to render_template("edit")
end
end
错误信息:
1) SubgroupsController PUT #update with invalid params assigns the subgroup as @subgroup
Failure/Error: put :update, {:id => subgroup.to_param, :subgroup => invalid_attributes}, valid_session
ActionView::Template::Error:
No route matches {:action=>"show", :controller=>"groups", :id=>nil, :locale=>nil}
但是 puts "param: #{subgroup.to_param}, id: #{subgroup.id}"
打印 param: 1, id: 1
很明显这些 id 不为零。
rake 路线:
subgroups GET (/:locale)/subgroups(.:format) subgroups#index
POST (/:locale)/subgroups(.:format) subgroups#create
new_subgroup GET (/:locale)/subgroups/new(.:format) subgroups#new
edit_subgroup GET (/:locale)/subgroups/:id/edit(.:format) subgroups#edit
subgroup GET (/:locale)/subgroups/:id(.:format) subgroups#show
PATCH (/:locale)/subgroups/:id(.:format) subgroups#update
PUT (/:locale)/subgroups/:id(.:format) subgroups#update
DELETE (/:locale)/subgroups/:id(.:format) subgroups#destroy
p.s。路线中列出了语言环境,但我删除了它们以便于查看。我不认为语言环境是这个问题,因为更新需要一个 :id 来更新。
问题不在于您的 put
路线,而在于它正在做的渲染。您收到模板错误,错误详情显示您正尝试在 groups
上执行 show
。检查布局中使用的路径。