2

質問コントローラーと関連モデル、およびいくつかの休憩ルートがあります。routes.rb での設定方法は次のとおりです。

resources :questions 

/questions/widget/ID という形式のカスタム ルートを追加したいと考えています (ID は、ウィジェットを生成する質問の ID です)。これを質問コントローラーの「ウィジェット」アクションで処理したい。私は次のような多くのことを試しました:

resources :questions  do
   member do
      get 'widget/:id'
   end
end

しかし、何も機能していません。私は単純なものが欠けていると確信しています。何か案は?前もって感謝します。

4

3 に答える 3

5

リソース内にいるため、id を指定する必要はありません。次のようになります。

resources :questions  do
   member do
      get 'widget'
   end
end

詳細については、Rails ガイドを参照してください。セクション 2.9.1 を見てください。

編集: get /questions/widget/:id と一致させようとしていることに気付きました。これにより、get /questions/:id/widget のルートが設定されます。これは、Rails の規則に沿ったものです。本当に別の方法が必要な場合は、カスタム マッチ ステートメントを設定する必要があります。

match "/questions/widget/:id" => "questions#widget"

ただし、私は慣例に固執します。

于 2012-11-01T19:23:07.473 に答える
1

古いことは知っていますが、ここで終了した別のルーティングの問題を修正しようとしています。あなたが求めていることを行うことは可能です。ここに例があります

resources :articles do
  get 'by_tag/:tag' => :by_tag, on: :collection
  get 'by_author/:author' => :by_author, on: :collection
  resources :comments, except: :show
end

これで /artices/by_tag/:tag ができました。トリックは on:collection を使用することでした。by_tag アクションと by_author を追加することを忘れないでください。

class ArticlesController < ApplicationController
.....
    def by_tag
    ...
    end
end

このルートが動作することを確認してください

melardev@local~$ rails routes
于 2018-09-09T11:42:26.157 に答える
0

このルートを使用しない理由:

resources :questions  do
  resources :widgets
end

questions/:question_id/widgets/new質問の特定のIDを持つ質問の新しいウィジェットを作成するようなパスを作成します。

于 2012-11-01T19:08:51.040 に答える