我正在使用设计应用程序,我不喜欢我的应用程序在成功登录后重定向的方式。这是rake routes
的输出:
manager_root GET /managers/dashboard(.:format) managers#dashboard
student_root GET /students/dashboard(.:format) students#dashboard
enterprise_root GET /enterprises/dashboard(.:format) enterprises#dashboard
到目前为止我有什么
def after_sign_in_path_for(resource)
"/#{current_user.profile_type.pluralize}/dashboard"
end
我尝试了什么
def after_sign_in_path_for(resource)
"#{current_user.profile_type}"_root_path
end
#=> application_controller.rb:17: syntax error, unexpected tIDENTIFIER, expecting keyword_end
def after_sign_in_path_for(resource)
"#{current_user.profile_type}_root_path"
end
#=> ERROR URI::InvalidURIError: the scheme http does not accept registry part:localhost:3000enterprise_root_path (or bad hostname?)
注意
我只有一个名为User
的设计模型,它有一个名为profile_type
的列,其值可以是'enterprise'
,'student'
或{{1} }。
我只是想使用我的路线别名。
我到目前为止所做的工作只是想改进它。
答案 0 :(得分:3)
我认为这应该适合你:
def after_sign_in_path_for(resource)
polymorphic_url([current_user.profile_type, :root])
end
答案 1 :(得分:3)
通过nash的回答,我搜索了一个更好的多态性用法并做出了我自己的答案。
这是获取帖子评论和新闻'评论
的网址的常用方法# parent may be a post or a news
if Post === parent
post_comments_path(parent)
elsif News === parent
news_comments_path(parent)
end
Rails提供了一种生成polymorphic url的简单方法。我们可以使用polymorphic_path
获取post
和news
'评论的网址
# "/posts/1/comments" or "'news/1/comments"
polymorphic_path([parent, Comment])
这可以获得帖子和新闻的网址
# "http://example.com/posts/1/comments" or "http://example.com/news/1/comments"
polymorphic_path(parent)
polymorphic_path使多态url生成更容易,更简单。还有一个名为polymorphic_url
的方法与polymorphic_path
相同,只是polymorphic_url
生成包含主机名的完整网址。
除此之外,rails还为polymorphic_path/polymorphic_url
new_polymorphic_path(Post) # "/posts/new"
new_polymorphic_url(Post) # "http://example.com/posts/new"
edit_polymorphic_path(post) # "/posts/1/edit"
edit_polymorphic_url(post) # "http://example.com/posts/1/edit"
就我而言,我只是
def after_sign_in_path_for(resource)
polymorphic_path [current_user.profile_type, :root]
end
答案 2 :(得分:0)
试试这个
def after_sign_in_path_for(resource)
send("#{current_user.profile_type}_root_path")
end