在仅使用Rails::API两年后,我正在尝试通过构建Rails monolit应用程序来更新我的知识。我使用Rails scaffold构建了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 routes向我展示了预期的结果:
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>发布于 2021-02-25 15:39:29
在index.html.erb中有Show,Edit,Destroy链接。因此您需要在routes.rb中定义它们
namespace :api do
namespace :v1 do
resources :properties, only: [:index, :show, :edit, :delete]
end
end添加您需要在index.html.erb中的路径中添加命名空间api_vi
<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>https://stackoverflow.com/questions/66358753
复制相似问题