ruby-on-rails - 版本控制控制器路径中的 Rails NoMethodError
问题描述
在仅使用 Rails::API 工作 2 年后,我试图通过构建 Rails monolit 应用程序来更新我的知识。我使用 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>
解决方案
中有Show
, Edit
,Destroy
链接index.html.erb
。所以你需要定义它们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>
推荐阅读
- php - php json格式的问题
- c# - 通过c#从xml获取记录信息在asp中填充gridview
- postgresql - 使用触发器将最后一行字段值复制到另一个列表
- bash - 无法在 docker alpine 映像上的 pm2 中运行 bash 脚本
- javascript - 有人可以解释为什么我的“滚动上的固定导航”不起作用吗?
- google-chrome - Pushpad:订阅提示仅在用户第一次单击 chrome 上的启用按钮时出现
- python - 在python中操作列表并创建一个新列表
- android - getDownloadUrl() 方法在 firebase 更新后被弃用
- php - 如何获取从 Shopify Webhook 中删除的订单 ID - Laravel 和 Shopify
- javascript - 如何使用 javascript 处理自定义 html 标签