我试图刷新我的知识与构建Rails monolit应用程序2年后与Rails::API工作。我使用Rails脚手架来构建Property
(rails generate scaffold property
),最后给我模型,控制器和视图。现在我试图使用版本控制有控制器结构:api/v1/properties_controller
。对于本例,让我们假设我只想要Index
动作,路由如下:
Rails.application.routes.draw do
namespace :api do
namespace :v1 do
resources :properties, only: [:index]
end
end
end
和rake路由显示了我预期的结果:
Prefix Verb URI Pattern Controller#Action
api_v1_properties GET /api/v1/properties(.:format) api/v1/properties#index
但是当我试图到达路径时,我得到了一个错误:
Api::V1::PropertiesController#index is missing a template for request formats: text/html
这意味着我没有views/api/v1/property
内的视图。当我将所有脚手架视图从app/views/properties
移动到app/views/api/v1/properties
时,我得到一个错误:
NoMethodError in Api::V1::Properties#index
undefined method `property_path' for #<#<Class:0x00007fc4b6656f08>:0x00007fc4b66540a0>
Extracted source (around line #23):
(...)
23 <td><%= link_to 'Show', property %></td>
是否有任何快速的方法将这些路径转移到正确的路径,或者我应该错过一些东西?
index.html.erb
<tbody>
<% @properties.each do |property| %>
<tr>
<td><%= property.name %></td>
<td><%= property.status %></td>
<td><%= property.name_tag %></td>
<td><%= property.portfolio_id %></td>
<td><%= link_to 'Show', property %></td>
<td><%= link_to 'Edit', edit_property_path(property) %></td>
<td><%= link_to 'Destroy', property, method: :delete, data: { confirm: 'Are you sure?' } %></td>
</tr>
<% end %>
</tbody>
index.html.erb
中有Show
,Edit
,Destroy
链接。所以你需要在routes.rb
:
namespace :api do
namespace :v1 do
resources :properties, only: [:index, :show, :edit, :delete]
end
end
添加您需要将命名空间api_vi
添加到index.html.erb
中的路径:
<td><%= link_to 'Show', api_v1_property_path(property) %></td>
<td><%= link_to 'Edit', api_v1_edit_property_path(property) %></td>
<td><%= link_to 'Destroy', api_v1_property_path(property), method: :delete, data: { confirm: 'Are you sure?' } %></td>