Rails 5.1 API - 使用嵌套资源的url_for不正确 - 如何修复?

时间:2017-10-22 11:44:21

标签: ruby-on-rails api url-for

鉴于此路线结构:

路线:

  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,但它似乎没有解释如何为嵌套资源执行此操作。

为嵌套资源生成位置网址的正确方法是什么?

1 个答案:

答案 0 :(得分:0)

从文档中看不出来,但我想出来了:

location: url_for([:api, @template_item.template, @template_item])

是如何做到的。