Вопрос

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

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

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

Это было полезно?

Решение

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

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

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

Теперь запрос вида Profile/view/john должен поступить к вам как

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

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

map.connect ':controller/:action/:user_name',
   :requirements => {:user_name => /\w+/}

Другие советы

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

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

что убережет вас от неприятностей в случае дублирования имен...

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

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

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

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

map.resources :users
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top