我在Rails 3中设置了没有任何宝石的restful身份验证和用户管理。
但是,我认为需要转到“/ sessions / new”而不是“/ sign_in”是愚蠢的。
我知道你可以为整个资源添加别名,所以我的用户可以使用“/ squirrels”和朋友来代替“/ sessions”和朋友,但那是不我的意思我试图在这里完成。我想为一个具体行动添加别名。
我知道可以用
完成种resources :sessions, :path_names => { :new => "sign_in" }
然后路由最终为“/ sessions / sign_in” - 我不希望控制器名称完全用于此操作。我希望我可以用
指定resources :sessions, :path_names => { :new => "/sign_in" }
其中“/”告诉rails它是一个完整的路径名。但这与第一个代码片段具有相同的效果。
我的最后一次尝试只是使用肤浅的
match "sign_in" => "sessions#new"
允许某人在其网址栏中手动输入“/ sign_in”,但与new_session_(path|url)
建立的链接仍然会让用户处于更加尴尬的“/ sessions / sign_in”。
答案 0 :(得分:5)
match "sign_in" => "sessions#new", :as => :new_session
答案 1 :(得分:2)
对于较新版本的Rails,您无法再使用匹配。而是使用http动词。
示例:
get "sign_in" => "sessions#new", :as => :new_session
请注意,我使用了get
而不是匹配。
在Rails 4.0.0上测试
答案 2 :(得分:1)
添加以下行:
map.sign_in '/sign_in', :controller => 'session', :action => 'new'
致config/routes.rb
。
答案 3 :(得分:0)
match "sign_in" => "sessions#new"
行创建一个名为“sign_in”的路线,您可以使用该路线代替“new_session”。因此,无论您使用“new_session_path”链接到任何内容,请将其替换为“sign_in_path”。
这很好。我原本希望做的事情会很好 - 将“new_session_path”链接到与“sign_in_path”相同的东西。能够指定不包含控制器的path_name。然后我根本不需要match
行。
答案 4 :(得分:0)
“路径”属性怎么样?这应该做你想要的。
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",
}