2

私のroutes.rb:

Temp::Application.routes.draw do
  resources :categories, path: '', only: [:index] do
    resources :entries, path: '', only: [:index, :show]
  end
end

これにより、次のルートが作成されます。

  $ rake routes
    category_entries GET /:category_id(.:format)     entries#index
      category_entry GET /:category_id/:id(.:format) entries#show
          categories GET /                           categories#index

質問:次のパラメータをなんとかして指定できますか:: category_id、:id?

詳細...パスでIDではなく名前を使用したいので、これが必要です。例:http://localhost:3000/cat1/ent11。私のエントリコントローラは次のとおりです。

class EntriesController < ApplicationController
  def index
    @entries = Category.where(name: params[:category_id]).first.entries
  end

  def show
    entries = Category.where(name: params[:category_id]).first.entries
    @entry = entries.select { |e|
      e.name == params[:id]
    } .first
  end
end

このコードは、の代わりに、、のようなものを書くことができれば、より理解しparams[:category_id]やすくparams[:id]なりparams[:category_name]ますparams[:entry_name]これどうやってするの?

更新:ルートを機知に富んだものにしたい...

4

1 に答える 1

1

routes.rb に次の行を追加できます。

match ':controller/:action/:category_name/:entry_name'

特定のコントローラーに必要なパラメーターを受け取るようにします。http://guides.rubyonrails.org/routing.html#non-resourceful-routesを参照してください。

于 2012-06-08T06:33:28.920 に答える