1

我正在为应用程序使用设计,但我不喜欢我的应用程序在成功登录后重定向的方式。这是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''manager'

  • 我只想使用我的路线别名。

  • 到目前为止,我得到了什么,所以我只想改进它。

4

3 回答 3

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 提供了一种生成多态 url的简单方法。所以我们可以使用polymorphic_path来获取post's 和news' 评论的 url

# "/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 生成变得更加容易和简单。还有一个名为的方法,它与生成包含主机名的完整 url的方法polymorphic_url相同。polymorphic_pathpolymorphic_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
于 2012-08-17T13:44:22.580 回答
3

我认为这应该适合你:

def after_sign_in_path_for(resource)               
  polymorphic_url([current_user.profile_type, :root])
end
于 2012-08-16T06:26:59.550 回答
0

尝试这个

def after_sign_in_path_for(resource)               
  send("#{current_user.profile_type}_root_path")
end
于 2012-08-16T09:35:24.817 回答