0

Railsはまだかなり新しいので、完全に間違ったアプローチを取っている場合は、遠慮なく私を怒らせてください。

ルートヘルパーメソッドを保持しながら、モデルを操作しないアクションでいっぱいのルートコントローラーがあることをroutes.rbに認識させるにはどうすればよいですか?次のようなリクエストに対応してほしいのですが。

http://localhost/download
http://localhost/share

のようなルートヘルパーと

download_app_path
share_path

ただし、次のような静的な名前付きルートはありません。

match '/download' => 'site#download', :as => :download_app
match '/share' => 'site#share', :as => :share

アプリからモデルを作成、表示、または操作しないSiteControllerから。

このようなアプローチを試してみましたが、ルートヘルパーを生成しなくても機能します(当然)

match '/:action', :controller => 'site'

理論的にはルートヘルパーがなくても実行できますが、URLオプションのハッシュをlink_toまたはformメソッドに渡すよりも少し読みやすいと思います。

より機知に富んだルートコントローラーを実現する方法はありますか、それとも私がRailsに対して型破りにしようとしていることですか?

編集

わかりやすくするために、このSiteControllerクラスは次のようになります。

class SiteController < ApplicationController
  def download
    @custom_options = { .. }
  end
  def share
    @custom_options = { .. }
  end
  def about
  end
end

その目的は、リソース(ユーザーやフレンドシップなど)と相互作用しないページを1つのコントローラーに収集し、それらをすべて1か所に保持できるようにすることです。このコントローラーをアプリケーションルートコントローラーとして設定しようとしています。そのため、このコントローラーからのすべてのパスは、アプリホスト(myapp.com/download)から直接離れます。

前もって感謝します!

4

1 に答える 1

1

ルートとリソースはモデルに関連付けられていません。これはただの RESTful な規則です。あなたの例では、インデックスアクションを使用したいだけで、次のdownloadようshareに行うことができます

resouce :download, only: [:index]
resouce :share, only: [:index]

ガイドのすべての例を参照してください http://guides.rubyonrails.org/routing.html

画像などの「リソース」にダウンロードおよび共有機能を追加する場合は、次のようにします。

resources :pictures do
  get 'download', :on => :member
  get 'share', :on => :member
end

/picturesたとえば、リソースには常にエンドポイントがあります。したがって、ホストへの直接パスが必要な場合は、例で行ったように、ルートにカスタムマッチャーを提供する必要があります。

于 2012-06-18T17:59:35.893 に答える