【发布时间】:2017-04-27 14:29:15
【问题描述】:
无法解决为嵌套属性创建索引路由测试的问题。我一直在尝试我所有的想法,但没有任何效果
我有 Service 模型和 ServiceRoute 模型。
ServiceRoute 属于_to 服务
和
Service has_many ServiceRoutes.
这是我的控制器:
class ServiceRoutesController < ApplicationController
before_action :set_service_route, only: [:show, :update, :destroy]
before_action :set_service, only: :create
def create
@service_route = @service.service_routes.build(service_route_params)
if @service_route.save
render json: @service_route, status: :created, location: @service_route
else
render json: @service_route.errors, status: :unprocessable_entity
end
end
private
def set_service_route
@service_route = ServiceRoute.find(params[:id])
end
def set_service
@service = Service.find(params[:service_id])
end
def service_route_params
params.require(:service_route).permit(:routes_list, :service_id)
end
end
我使用 build 方法创建 ServiceRoute
我的 routes.rb 文件:
resources :services do
resources :service_routes
end
测试“应该创建服务路由”有错误:
ActionController::UrlGenerationError:没有路由匹配 {:action=>"index", :controller=>"service_routes"} 缺少必需的键:[:service_id]
test "should create service_route" do
assert_difference('ServiceRoute.count') do
post service_service_routes_url, params: { service_route: {routes_list:
@service_route.routes_list, service_id: @service_route.service_id } },
as: :json
end
我应该如何重构这个测试以匹配路由:/services/:service_id/service_routes
【问题讨论】:
-
尝试从
:service_route键中发送:service_id参数。很容易忽略这样的事情。 -
test "should create service_route" do assert_difference('ServiceRoute.count') do post service_service_routes_url, params: { service_route: { routes_list: @service_route.routes_list}, service_id: @service_route.service_id }, as : :json 结束
-
你的意思是这样吗?不幸的是不起作用:/
-
当您明确发送 POST 时,测试试图达到
:index操作很奇怪。强制post :create而不是发送路由。 -
您从 :service_route 键中发送 :service_id 参数的解决方案适用于 service_routes_url 但请注意我要检查 service_service_routes_url跨度>
标签: ruby-on-rails ruby for-loop testing ruby-on-rails-5