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,

Другие вопросы по тегам