我可以在rails项目中为params hash的元素指定名称(比如':name'而不是':id')?

时间:2012-06-08 06:27:05

标签: ruby-on-rails routing routes url-routing

我的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]的内容,那么此代码将更容易理解。 我该怎么做?

更新:我想让我的路线保持足够的资源......

1 个答案:

答案 0 :(得分:1)

在您的routes.rb中,您可以添加

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

让某个控制器接收你想要的参数。请参阅http://guides.rubyonrails.org/routing.html#non-resourceful-routes