2

我有一個'事務'模型,控制器和視圖,我用rails創建的。現在我需要添加一個/ transactions/history的自定義路由到我的應用程序,由控制器def歷史處理:...結束並呈現history.html.erb

因此,在我的routes.rb中添加了這一行:如何在rails中添加單個自定義路由?

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

這在我transactions_controller.rb:

def history 
    @transactions = Transaction.all 
end 

,並創造了一個事務 - history.htmk.erb>意見

我也看到了這條線叫耙路由時:

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

但是,當我要求本地主機:3000 /交易/歷史在我的瀏覽器,它給了我下面的錯誤:

Couldn't find Transaction with 'id'=history 

(因爲我有我的控制器此行)

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

,我也看到這一行日誌:

Request info 

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

我的全路徑: routes.rb 我充滿了錯誤: error logs 爲什麼它是在呼喚我的交易控制器中的「顯示」行動?

+0

您可以發佈您充分的routes.rb文件?還有你在耙路時看到的全部成績單? – moveson

回答

2

在你的routes.rb,鐵軌腳手架發電機應該增加了一個resources :transactions。這將爲您生成7條路線,其中之一是/transactions/:id,它對應於TransactionsController中的顯示操作。

Rails按照routes.rb中定義的順序匹配路由,並將調用匹配路由的第一個的控制器動作。

我猜你的情況下,你定義get '/transactions/history', to: 'transactions#history', as: 'transactions_history'低於resources :transactions。正如您通過/transactions/history,這是調用show行動與:id匹配history

爲了解決這個問題,有兩個解決方案:

首先,移動resources :transactions高於自定義路線。

或延長resources聲明並刪除,像這樣的自定義路線:

resources :transactions do 
    collection do 
    get :history 
    end 
end 
+0

我想你的第二個解決方案,並沒有工作(同樣的錯誤) –

+1

您應該只有一個'資源:transactions'。發表您的'routes.rb' – AbM

+0

這解決了這個問題,我不知道只有一個資源點:交易。 謝謝:) –

0

這是因爲你的路由與默認的資源衝突的途徑,特別是GET transactions/:id

resources :transactions do 
    get :history, on: :collection 
end 

http://guides.rubyonrails.org/routing.html#adding-collection-routes

你還可以嘗試:

  1. 開關,你的路由定義的順序,或
  2. 更改您的自定義路線,因此並不衝突,例如而不是/transactions/history嘗試/transaction_history或別的東西。
+0

是的,我試過了,但同樣的錯誤 –

+0

你重新啓動服務器? – jverban

+0

是的,我重新啓動了 –