Помощь с маршрутами Rails - PullRequest
0 голосов
/ 30 марта 2009

Скажите, если у меня есть контроллер, профиль, который имеет только два действия. Первый - list, который просто покажет список имен. Я хочу, чтобы эти имена были ссылками, которые затем приведут вас на страницу с полным профилем. Поэтому мне нужно второе действие, view, которое может затем прокормить параметр, чтобы указать, какой профиль просматривать.

Например: я бы получил доступ к /profile/list, затем, если я захочу просмотреть профиль Джона, я нажму на его имя, которое должно привести меня к /profile/view/john. Мое действие просмотра прочитает параметр john и затем сделает соответствующие запросы к базе данных.

Какие изменения мне нужно внести в route.rb, чтобы это произошло? Приветствия.

Ответы [ 3 ]

0 голосов
/ 30 марта 2009

Я бы предпочел использовать маршрут по умолчанию: controller /: action /: id для защиты от случаев, когда в списке есть 2 Джона.

Чтобы иметь собственный маршрут, как вы упомянули отредактируйте Routes.rb, чтобы включить новый

map.connect ':controller/:action/:user_name'

Теперь такой запрос, как профиль / просмотр / john, должен доходить до вас как

@params = {:controller => "profile", :action=> "view", :user_name => "john"}

Используйте значение params [: user_name], чтобы найти и отобразить соответствующую запись в действии view контроллера. Вы также можете установить некоторые требования в части: имя_пользователя URL, например, он должен соответствовать / SomeRegexpToValidateNames /

map.connect ':controller/:action/:user_name',
   :requirements => {:user_name => /\w+/}
0 голосов
/ 30 марта 2009

если вы хотите идентифицировать профили по имени, в качестве "/ profile / view / john" вы можете использовать плагин permalink_fu

http://www.seoonrails.com/even-better-looking-urls-with-permalink_fu

, которая избавит вас от неприятностей, когда произойдет дублирование имен ...

0 голосов
/ 30 марта 2009

Если модель "пользователь", вы должны переопределить метод to_param. Это позволит вам вернуть «id-имя» пользователя вместо «id». (напр. / профиль / просмотр / 23-й)

Я знаю, это не совсем то, что вы просили, но это должно быть простое решение.

class User < ActiveRecord::Base
  def to_param
    "#{id}-#{name.gsub(/\W/, '-').downcase}"
  end
end

И просто добавьте простое объявление ресурса в конфигурацию маршрутизации:

map.resources :users
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...