2

私が行っている仮定のいずれかが間違っている場合は修正してください。ただし、次のように考えています。

ルート ファイルで新しい「リソース」を使用する場合、たとえば新しい GET REST API を使用するには、そのリソースに対して新しい「コントローラー」も使用することをお勧めします。

新しいコントローラーを使用すると、そのコントローラーの名前に基づいて新しいデフォルト ルートも取得されます。ここから私の質問が始まります:)

私はすでにコントローラーとGET RESTを持っているので、たとえば、health_mamagmentコントローラーと次のようなURLがあります/health_managment/id.json

その URL にアクセスしている間に、さらにいくつかのナビゲーション リンク (Windows アプリのタブなど) があるため、ユーザーは他のリンクをクリックして、新しいデータを表示する必要があります。(それでもワークフローは同じですが、彼は新しいデータを見たいだけです)。

ここでは、新しい GET REST API を呼び出して、たとえば Payers というリンクの新しいデータを取得しています。

では、URL のような/health_managment/id/payes ものは理にかなっていますか?

しかし、この新しい「payers」ビュー用に新しいコントローラーとリソースを作成すると、routes ファイルで「as」キーワードを使用できますか? 新しいルートをマッピングします/health_managment/id/payes

4

2 に答える 2

3

ルート ファイルでリソースをネストし、使用するコントローラーを指定できます。

 # /config/routes.rb
 resources :health_managment do
   resources :payes, :controller => "Payer" do
     member do
       # Your custom routes
     end
   end
 end

これにより、URL /health_managment/id/payes を使用できるようになります。

「Payer」コントローラーへのアクセスとして。

:as を使用しても URI エンドポイントは変更されませんが 、セクション 4 のhttp://guides.rubyonrails.org/routing.htmlに記載されているように名前付きヘルパーが変更されます。

コメントで要求されているように、「メンバー」部分をさらに詳しく見てみましょう。

 # /config/routes.rb
 resources :posts do
   get 'recent'
   member do
       get 'abstract'
   end
 end

カスタム URL を生成します:

  • /posts/recent を取得すると、投稿のリストが表示されます。URLを投稿のコレクションにリンクしています
  • /posts/:id/abstract を取得すると、別の方法で1 つの投稿(ID が指定されたもの) が表示されます

あるいは、このルートを次のように書くこともできます:

 # /config/routes.rb
 resources :posts do
   get 'recent', :on => :collection
   get 'abstract', :on => :member
 end

サブリソースを宣言すると、それらは「メンバーレベル」で設定されるため、次のようになります。

 # /config/routes.rb
 resources :posts do
   get 'recent', :on => :collection
   get 'abstract', :on => :member
   resources :comments do
      # Routes again
   end
 end

URI /posts/:id/comments にアクセスし、そこからカスタム ルートを定義できます。

于 2013-02-26T15:43:22.200 に答える
1

はい、あなたが提案した URL は理にかなっていますが、ルート ファイルでそれをどのようにマップするかは、health_management リソースと payers リソースの間の関係によって異なります。

2 つの間に has_many/belongs_to 関係がある場合は、ネストされたリソースを確認することをお勧めします。次のルートを使用して手動でこれを行うこともできます。

get '/health_managment/:id/payers' => 'payers#index'

Payers コントローラ ファイルでは、次の index アクションを使用できます。

def index
  @health_managment = HealthManagment.find(params[:id])
  @payers = @health_managment.payers
end

ただし、API に取り組んでいる場合は、それを通常の REST 構造に制限することは理にかなっています。このために、ネストされたリソースはうまく機能します。

于 2013-02-26T15:32:33.307 に答える