Псевдоним для конкретного действия ресурса ("/ sign_in" вместо "/ session / new") - PullRequest
3 голосов
/ 15 августа 2010

Я установил спокойную аутентификацию и управление пользователями без каких-либо драгоценных камней в Rails 3.

Тем не менее, я думаю, что глупо переходить к / сессиям / новым вместо /sign_in".

.

Я знаю, что вы можете использовать псевдоним для всего ресурса, чтобы вместо «/ сессий» и друзей мои пользователи могли использовать «/ белок», а это друзья, но это не , что я пытаясь достичь здесь. Я хочу присвоить псевдониму одно конкретное действие.

Я знаю, что вид может быть достигнут с

resources :sessions, :path_names => { :new => "sign_in" }

но тогда маршрут заканчивается как "/ session / sign_in" & mdash; и я не хочу, чтобы имя контроллера было там вообще для этого действия. Я хотел бы указать это с

resources :sessions, :path_names => { :new => "/sign_in" }

где "/" указывает рельсам, что это полное имя пути. Но это имеет тот же эффект, что и первый фрагмент кода.

Моя последняя попытка была просто использовать поверхностный

match "sign_in" => "sessions#new"

, который позволяет кому-то вручную вводить "/ sign_in" в своей строке URL, но ссылки, сделанные с помощью new_session_(path|url), по-прежнему приводят пользователей к более неудобному "/sessions/sign_in".

Ответы [ 5 ]

5 голосов
/ 17 августа 2010
match "sign_in" => "sessions#new", :as => :new_session
2 голосов
/ 29 августа 2013

Для более новых версий Rails вы больше не можете использовать match.Вместо этого используйте http глагол.

Пример:

get "sign_in" => "sessions#new", :as => :new_session

Обратите внимание, что я использовал get вместо соответствия.

Протестировано на Rails 4.0.0

1 голос
/ 16 августа 2010

Добавьте эту строку:

map.sign_in '/sign_in', :controller => 'session', :action => 'new'

К вашему config/routes.rb.

0 голосов
/ 29 августа 2013

Как насчет атрибута "путь"?Это должно делать то, что вы хотите.

devise_for :users,
path: '',
controllers: {
  sessions: "user/sessions",
  passwords: "user/passwords",
  confirmations: "user/confirmations",
  registrations: "user/registrations"
},
path_names: {
  sign_in: "login",
  sign_out: "logout",
}
0 голосов
/ 16 августа 2010

Строка

match "sign_in" => "sessions#new"

создает маршрут с именем "sign_in", который вы можете использовать вместо "new_session".Поэтому, где бы вы ни ссылались на вещи с помощью «new_session_path», замените его на «sign_in_path».

Это достаточно хорошоТо, что я изначально надеялся сделать, было бы неплохо - иметь ссылку «new_session_path» на то же самое, что и «sign_in_path».Чтобы можно было указать путь к файлу, который не включает в себя контроллер.Тогда мне вообще не понадобится строка match.

...