我的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]
的内容,那么此代码将更容易理解。
我该怎么做?
更新:我想让我的路线保持足够的资源......
答案 0 :(得分:1)
在您的routes.rb中,您可以添加
行match ':controller/:action/:category_name/:entry_name'
让某个控制器接收你想要的参数。请参阅http://guides.rubyonrails.org/routing.html#non-resourceful-routes。