2

私はレールで生成した 'トランザクション'モデル、コントローラ、ビューを持っています。今度はコントローラの歴史によって処理されるアプリケーションに/トランザクション/履歴の単一のカスタムルートを追加する必要があります:... 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-でhistory.htmk.erbを作成>ビュー

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

しかし、私はlocalhostを要求したときに:私のブラウザで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 なぜ私のトランザクションコントローラで 'show'アクションが呼び出されていますか?

+0

完全なroutes.rbファイルを投稿できますか?あなたがルートをレーキしたときに見えるものの完全な写し? – moveson

答えて

2

routes.rbには、レールスキャフォールドジェネレータにresources :transactionsが追加されているはずです。これにより、7つのルートが生成されます。そのうちの1つは/transactions/:idで、これはshowアクションに対応します。TransactionsControllerです。

Railsはroutes.rbで定義された順序でルートに一致し、のコントローラアクションを最初にのルートと呼びます。

あなたの場合、get '/transactions/history', to: 'transactions#history', as: 'transactions_history'以下をresources :transactionsと定義して推測しています。 /transactions/historyを渡しているので、これは:idhistoryに一致するshowアクションを呼び出しています。この問題を解決するには

は、2つのソリューションがあります。

まず、resources :transactions上のカスタムルートを移動します。

またはresources宣言を拡張し、そのようなあなたのカスタムルートを削除します。

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

私はあなたの2番目のソリューションを試してみましたが、うまくいきませんでした(同じエラー) –

+1

あなたは 'resources:transactions'を1つだけ持っているべきです。あなたの '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

はい、再開しました –

関連する問題