1

カスタムルートがメソッドによって認識されることを確認する方法はあり*_pathますか?

リソースと、同じコントローラーへのカスタムルートがあります。

resources :news, :only => [:index, :show], :path => :nieuws
match '/nieuws/:cat/:id/:slug', :to => 'news#show'
match '/nieuws/:id/:slug', :to => 'news#show'

これは正常に機能しており、リクエストhttp://www.example.com/nieuws/category/1/slugすると正しいニュースアイテムが表示されます。news_path問題は、このメソッドを使用してニュースアイテムにリンクしたいということです。これを実現するために、ニュースアイテムモデルに次のコードを追加しました。

def to_param
  if news_category
    "#{news_category.slug}/#{id}/#{slug}"
  else
    "#{id}/#{slug}"
  end
end

/cat、id、slugを分離するために使用しない場合/は正常に機能しますが、news_pathメソッドを使用する場合は失敗し、要求されたページが表示されます。

No route matches {:action=>"show", :controller=>"news", :id=>#<NewsItem id: 1...etc

私のrake routes出力:

news_index GET /nieuws(.:format)                {:action=>"index", :controller=>"news"}
news       GET /nieuws/:id(.:format)            {:action=>"show", :controller=>"news"}
               /nieuws/:cat/:id/:slug(.:format) {:controller=>"news", :action=>"show"}
               /nieuws/:id/:slug(.:format)      {:controller=>"news", :action=>"show"}

, :id => /[0-9]+\/.+/すでにリソースルートの最後に追加しようとしました。これにより、の使用が可能になりますが/、正規表現を使用しているため:cat、URLからパラメーターを取得できません。

それで、私のカスタムルートがメソッドによって認識されることを確認する方法はありnews_pathますか?

4

1 に答える 1

0

使わないように使っていると思いますto_param。メソッドがある場合は、ファインダーとしてのメソッドto_paramも必要でありfrom_param、パスではなく常にトークンにマップする必要があります。つまり"#{news_category.slug}-#{id}-#{slug}"、の代わりに"#{news_category.slug}/#{id}/#{slug}"

パスセグメントで区切る必要がない場合は、次のように呼び出しに含める必要がありますnews_path

news_path(news, :cat => news_category.slug, :slug => slug)

詳細については、ガイドを参照してください:http: //guides.rubyonrails.org/routing.html#segment-constraints

于 2012-01-20T13:48:32.087 に答える