Макет URL для общих действий - PullRequest
1 голос
/ 24 апреля 2009

Мое приложение в настоящее время имеет очень простой макет URL:

map.resource  :account, :controller => "users", :only => [:show, :update, :destroy] 
map.resources :workouts do |workout|
  workout.resource  :chart, :only => [:show]
  workout.resources :taggings, :only => [:destroy, :create]
end

Дайте мне хорошие легкие ссылки для текущего пользователя. Сейчас я добавляю некоторые общедоступные функции - возможность для публики видеть предметы. Я хотел бы добавить имя пользователя к этим URL-адресам. В то же время для публичных пользователей нет необходимости иметь доступ к чему-либо, кроме одного ресурса тренировки. Я не уверен, что лучший способ сделать это. Я хотел бы получить URL-адреса, которые выглядят следующим образом:

/teich/workouts/3454

Что примерно равно

/:user_login/workouts/:id

Должен ли я path_prepend? Для текущего пользователя, которому нужны полные элементы управления RESTful, лучше ли по-прежнему использовать префикс имени пользователя вместо прямых URL-адресов, как у меня сейчас? Разве я не переживаю обо всех дополнительных маршрутах с path_prepend, так как я все равно буду :before проверять права доступа?

Ответы [ 2 ]

1 голос
/ 24 апреля 2009

Вероятно, самый простой способ получить нечто подобное - переопределить to_param в вашей User модели.

  def to_param
    "#{id}-#{login}"
  end

Rails использует этот метод при генерации путей для модели. Затем при выполнении находит строку отправляет to_i, который будет захватывать целое число.

Не забывайте, что вам также нужно экранировать недействительные символы URL.

0 голосов
/ 21 июля 2009

Включение определений URI или соглашений об именах как части вашего API нарушает ограничение архитектуры REST. Смотри: http://roy.gbiv.com/untangled/2008/rest-apis-must-be-hypertext-driven

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