Я портирую приложение Merb на Rails 3. В Merb мы могли бы поместить блок Identify вокруг маршрута, чтобы определить, как должен быть предоставлен параметр маршрута: id, например,
# this is a Merb route that I want to port to Rails 3 routing; I get everything except
# how to replicate the behavior of Merb's Identify block which doesn't require one to
# futz with overriding to_param on user; a user instance gets passed to the url builder
# ala url(:edit_password_reset, user) and this tells the router to use the
# reset_password_token method on user to supply the :id value for this one route
Identify User => :reset_password_token do
match("/reset-password/:id", :method => :get).to(:controller => "password_resets", :action => "edit").name(:edit_password_reset)
end
# and then later define more routes that use the user's id without a problem
# since to_param was not overridden on user; here I have already translated to
# Rails 3 and this works fine
controller :users do
get "/register", :action => "new", :as => "new_user"
get "/users", :action => "index", :as => "users"
get "/users/:id", :action => "show", :as => "show_user"
get "/users/:id/edit", :action => "edit", :as => "edit_user"
put "/users/:id", :action => "update", :as => "update_user"
post "/users", :action => "create", :as => "create_user"
end
В Rails, как и в Merb, вы можете переопределить to_param для предоставления альтернативного значения идентификатора для маршрутов, но для случая, когда один раз вы хотите использовать идентификатор, а другой раз вы хотите использовать другой метод для того же объекта (как указано выше), Идентифицировать удобно. Что такое эквивалент Rails 3? Я просмотрел исходные тексты и тесты Rails 3 и не увидел ничего эквивалентного идентификатору. Я пропустил это?
Я могу реорганизовать вещи и, возможно, в этом случае они мне не понадобятся, но все же я хотел бы знать, пропустил ли я что-то.
Спасибо.