Rails版本控制控制器路径NoMethodError



我试图刷新我的知识与构建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>

相关内容

  • 没有找到相关文章