Ruby on rails
Я уверен, что есть простое решение этого, но я не могу найти его.
Я хочу сопоставить следующее динамическое имя пользователя:
/users/dymanicUsername
Как бы это выглядело в ways.rb
Спасибо за любую помощь.
2 ответа
Алистер,
Для этого просто переопределите to_param в вашей модели. Например:
#users.rb
def to_param
self.username
end
Вы скоро столкнетесь с некоторыми проблемами:
- конфликтует с существующими маршрутами. Например, имя пользователя не должно быть "новым", понятно?
- для получения вашего пользователя в контроллере, вы должны создать метод (это то, что я сделал, может быть, не лучшее решение) в вашей модели, как этот self.find_for_controller(имя пользователя)
- Ваше имя пользователя должно содержать только символы с поддержкой URL (забудьте акценты, знаки препинания и т. д.). Решением для этого является наличие второго имени атрибута
username_urlized
это, конечно, должно быть уникальным и не конфликтовать с другими маршрутами
А может и ещё проблемы:)
Кроме того, если вы хотите что-то вроде twitter (yoursite.com/dynamicUserName), выполните следующие действия в router.rb:
resources :users, :path=>'' do
Вот хорошее объяснение 2006 года, которое выглядит хорошо для Rails 2.3. *: http://garrickvanburen.com/archive/using-names-in-rails-routes-instead-of-ids
Основные проблемы, которые я вижу, состоят в том, что вы хотели бы обеспечить не только все вышеперечисленное, о котором упоминает Марсель, но и то, что это имя уникально. т.е. поставить индекс на имя с :unique => true
в миграции.
Для rails3, который я сейчас обновляю, вы бы сделали маршрутизацию иначе. Например map.connect
заменяется match
,