gpt4 book ai didi

ruby-on-rails - 如何在 rails 中添加单个自定义路由?

转载 作者:数据小太阳 更新时间:2023-10-29 07:15:50 25 4
gpt4 key购买 nike

我有一个“事务”模型、 Controller 和 View ,它们是我使用 rails generate 创建的。现在我需要向我的应用程序添加一个自定义路由/transactions/history 以由 Controller 处理 def history:... end and render history.html.erb

所以在我的 routes.rb 中添加了这一行:

get '/transactions/history', to: 'transactions#history', as: 'transactions_history'

这在我的 transactions_controller.rb 中:

def history
@transactions = Transaction.all
end

并在 transactions->views 中创建了一个 history.htmk.erb

我在调用 rake 路由时也看到了这一行:

transactions_history GET    /transactions/history(.:format)                 transactions#history

但是当我在我的浏览器中请求 localhost:3000/transactions/history 时,它给我以下错误:

Couldn't find Transaction with 'id'=history

(因为我的 Controller 中有这一行)

before_action :set_transaction, only: [:show, :edit, :update, :destroy])

而且我还在日志中看到了这一行:

Request info

Request parameters
{"controller"=>"transactions", "action"=>"show", "id"=>"history"}

我的完整路线: routes.rb我的全部错误: error logs为什么它在我的事务 Controller 中调用“显示”操作?

最佳答案

在您的 routes.rb 中,rails 脚手架生成器应该添加了一个 resources :transactions。这将为您生成 7 条路由,其中​​之一是 /transactions/:id,它对应于 TransactionsController 中的显示操作。

Rails 按照routes.rb 中定义的顺序匹配路由,并将调用第一个 匹配路由的 Controller 操作。

我猜你在 resources :transactions 下面定义了 get '/transactions/history', to: 'transactions#history', as: 'transactions_history' .当您传递 /transactions/history 时,这是调用 show 操作,其中 :id 匹配 history

要解决此问题,有 2 个解决方案:

首先,将自定义路由移到 resources :transactions 上方。

或者像这样扩展resources声明并移除你的自定义路由:

resources :transactions do
collection do
get :history
end
end

关于ruby-on-rails - 如何在 rails 中添加单个自定义路由?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42464328/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com