2009-11-21 5 views
0

Я пытаюсь понять, как изменить это правило, непосредственно на map.resources:Рельсы RESTful Маршруты: переопределение Params [: ID] или [Params: model_id] по умолчанию

предположив У меня есть маршрут:

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

, так что я бы RESTful маршруты, как это:

/: пользователь/DOCS

/Docs /: Идентификация

/Docs /: doc_id/спецификации

Так я вижу, что трудно отследить params[:doc_id] по этому делу, потому что иногда его params[:id] и иногда его params[:doc_id] и в этом случае я хотел бы всегда вызывать для одного конкретного имени поэтому мне не придется создавать две разные декларации для моих фильтров.

Ну, я сделал немного исследования и я нашел этот патч:

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

и в основном то, что это делает это даст вам возможность добавить: ключевой параметр на вас map.resources так вы можете определить, как вы хотели бы, чтобы ссылаться на него позже, чтобы мы могли иметь что-то вроде:

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

, так что я всегда называем Пары с params[:doc] вместо этого.

Но на самом деле этот патч немного старый (3 года) , поэтому мне было интересно, если у нас нет ничего нового и уже встроенного для рельсов для выполнения этой задачи?

P.S Я не уверен, что метод to_param определенной внутри модели, по-видимому, это ничего не изменило на мои просьбы, и на бревнах я все еще получаю: Parameters: {"doc_id"=>"6"} или Parameters: {"id"=>"6"} все время.

ответ

0

Один из способов сделать параметры немного более дружественным без написания полностью пользовательских маршрутов является

# 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 

Это даст вам URL-адреса, которые выглядят как-то example.com/docs/234-the-name-of -your-doc

+0

После публикации я вижу, что я не совсем отвечаю на ваш вопрос. У Rails нет функциональности, которую вы ищете встроенной, по умолчанию параметры params [: id], указывающие на текущий ресурс, по-прежнему остаются. Родительские записи получают параметры [: parent_id] для согласованности. Для глобальных фильтров за пределами текущего ресурса, почему бы просто не передать соответствующую переменную в качестве параметра фильтра? – bensie

+0

Да, это так, спасибо, bensie. но все же, эта вещь о не дает вам возможность изменить ключ ресурса, его вид бессмысленного не так ли? Какими будут минусы в этой ситуации? Я не понимаю: \ – zanona

 Смежные вопросы

  • Нет связанных вопросов^_^