首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >版本控制控制器路径中的Rails NoMethodError

版本控制控制器路径中的Rails NoMethodError
EN

Stack Overflow用户
提问于 2021-02-25 04:58:57
回答 1查看 28关注 0票数 0

在仅使用Rails::API两年后,我正在尝试通过构建Rails monolit应用程序来更新我的知识。我使用Rails scaffold构建了Property (rails generate scaffold property),最后给出了模型、控制器和视图。现在我尝试在中使用版本控制来拥有控制器结构:api/v1/properties_controller。对于这个例子,让我们假设我只想有Index操作,路由如下:

代码语言:javascript
复制
Rails.application.routes.draw do
  namespace :api do
    namespace :v1 do
      resources :properties, only: [:index]
    end
  end
end

而rake routes向我展示了预期的结果:

代码语言:javascript
复制
                           Prefix Verb   URI Pattern                                                                              Controller#Action
                api_v1_properties GET    /api/v1/properties(.:format)                                                             api/v1/properties#index

但是当我试图到达路径时,我得到了一个错误:

代码语言:javascript
复制
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时,我得到了一个错误:

代码语言:javascript
复制
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

代码语言:javascript
复制
  <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>
EN

回答 1

Stack Overflow用户

发布于 2021-02-25 15:39:29

index.html.erb中有ShowEditDestroy链接。因此您需要在routes.rb中定义它们

代码语言:javascript
复制
namespace :api do
  namespace :v1 do
    resources :properties, only: [:index, :show, :edit, :delete]
  end
end

添加您需要在index.html.erb中的路径中添加命名空间api_vi

代码语言:javascript
复制
<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>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66358753

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档