0

このルールをmap.resourcesで直接変更する方法を理解しようとしています:

ルートがあるとします:

map.resource :user, :as => ':user', :shallow => true do |user|
    user.resources :docs, :shallow => true do |file|
        file.resources :specs
    end
end

したがって、次のようなRESTfulルートがあります。

/:ユーザー/ドキュメント

/docs/:id

/docs/:doc_id/specs

したがって、params[:doc_id]この場合は追跡が難しいことがわかります。これは、フィルターに対して2つの異なる宣言を作成する必要がないように、常に1つの特定の名前を呼び出したいためです。params[:id]params[:doc_id]

さて、私は少し調査を行い、次のパッチを見つけました。

http://dev.rubyonrails.org/ticket/6814

基本的にこれが行うことは、 map.resources に :key パラメータを追加できるようにすることです。これにより、後で参照する方法を定義して、次のようなものを作成できます。

map.resources :docs, :key => :doc ...

そのため、代わりに常にパラメーターを呼び出しますparams[:doc]

しかし、実際にはこのパッチは少し古い (今では 3 年) ので、レールがこのタスクを実行するための新しいものが既に組み込まれていないのではないかと考えていました。

PSモデル内で定義されたto_paramメソッドについてはわかりません。明らかに、これは私のリクエストと私がまだ取得しているログで何も変更しませんでした: Parameters: {"doc_id"=>"6"}またはParameters: {"id"=>"6"}常に。

4

1 に答える 1

0

完全にカスタムのルートを記述せずにパラメータをもう少しわかりやすくする1つの方法は、

# docs_controller.rb
def show
  @doc = Doc.find(params[:doc].to_i)
end

# doc.rb
def to_param
  [ id, permalink ].join("-")
  # assumes you're storing a permalink formatted version of the name of your doc
end

# routes.rb
map.resources :docs

これにより、example.com / docs/234-the-name-of-your-docのようなURLが得られます

于 2009-11-21T18:36:10.147 に答える