Rails 5.1 API - 嵌套资源不正确 url_for
Rails 5.1 API - incorrect url_for with a nested resource
鉴于此路由结构:
路线:
namespace :api do
resources :templates do
resources :template_items
end
end
我搭建了 template_items 控制器(但不记得我具体指定了什么)但它给了我这个创建操作:
# POST /template_items
def create
@template_item = TemplateItem.new(template_item_params)
if @template_item.save
render json: @template_item, status: :created, location: @template_item
else
render json: @template_item.errors, status: :unprocessable_entity
end
end
位置抛出错误:
NoMethodError (undefined method `template_item_url'
for #<Api::TemplateItemsController:0x007fe84774fba8>
所以我改成了:
url_for([:api, @template_item])
也失败了:
NoMethodError (undefined method `api_template_item_url'
然后我尝试了:
url_for([:api, :template, @template_item])
失败了:
ActionController::UrlGenerationError
(No route matches
{:action=>"show",
:controller=>"api/template_items",
:template_id=>#<TemplateItemid: "b4a3921b-dcae-4902-aaf7-b2ef40e13707",
template_id: "b2f22587-a36e-469f-9485-45b7d60c0120",
content: nil,
is_completed: false,
item_type: "item",
sort: 7,
created_at: "2017-10-22 11:37:17",
updated_at: "2017-10-22 11:37:17">},
missing required keys: [:id]):
我已阅读 the docs,但它似乎没有解释如何为嵌套资源执行此操作。
为嵌套资源生成位置 url 的正确方法是什么?
文档中一点也不明显,但我想通了:
location: url_for([:api, @template_item.template, @template_item])
是怎么做的。
鉴于此路由结构:
路线:
namespace :api do
resources :templates do
resources :template_items
end
end
我搭建了 template_items 控制器(但不记得我具体指定了什么)但它给了我这个创建操作:
# POST /template_items
def create
@template_item = TemplateItem.new(template_item_params)
if @template_item.save
render json: @template_item, status: :created, location: @template_item
else
render json: @template_item.errors, status: :unprocessable_entity
end
end
位置抛出错误:
NoMethodError (undefined method `template_item_url'
for #<Api::TemplateItemsController:0x007fe84774fba8>
所以我改成了:
url_for([:api, @template_item])
也失败了:
NoMethodError (undefined method `api_template_item_url'
然后我尝试了:
url_for([:api, :template, @template_item])
失败了:
ActionController::UrlGenerationError
(No route matches
{:action=>"show",
:controller=>"api/template_items",
:template_id=>#<TemplateItemid: "b4a3921b-dcae-4902-aaf7-b2ef40e13707",
template_id: "b2f22587-a36e-469f-9485-45b7d60c0120",
content: nil,
is_completed: false,
item_type: "item",
sort: 7,
created_at: "2017-10-22 11:37:17",
updated_at: "2017-10-22 11:37:17">},
missing required keys: [:id]):
我已阅读 the docs,但它似乎没有解释如何为嵌套资源执行此操作。
为嵌套资源生成位置 url 的正确方法是什么?
文档中一点也不明显,但我想通了:
location: url_for([:api, @template_item.template, @template_item])
是怎么做的。