1

アプリケーションにdeviseを使用していますが、ログインに成功した後のアプリのリダイレクト方法が気に入らないのです。これは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?)

ノート

  • と呼ばれるデバイスモデルが1つだけあり、その値が、、またはであるUserという列があります。profile_type'enterprise''student''manager'

  • ルートエイリアスを使用したいだけです。

  • 私がこれまでに得たものは、私はそれを改善したいだけです。

4

3 に答える 3

3

私はこれがあなたのために働くはずだと思います:

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

ナッシュの答えを通して、私はポリモーフィックのより良い使用法を探し、自分自身の答えを作りました。

投稿のコメントとニュースのコメントのURLを取得する一般的な方法は次のとおりです

# 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を生成する簡単な方法を提供します。したがって、を使用して'sおよび'コメントのpolymorphic_pathURLを取得できますpostnews

# "/posts/1/comments" or "'news/1/comments"
polymorphic_path([parent, Comment])

これで投稿やニュースのURLを取得できます

# "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 に答える
0

これを試して

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