如何在用户登录后立即将用户发送到他们的个人资料?

时间:2017-05-31 19:10:59

标签: ruby-on-rails ruby

我有一个与设计相关的用户模型。 Userinfo模型属于User模型。 userinfo模型通过表单接收一些信息(姓名,电子邮件,学校......)。现在,只要用户注册或登录,程序就会检查current_user是否填写了信息,如果没有,他们将被路由以填写信息页面。如果他们填写了信息,他们将被路由到主页,即userinfo索引页面。索引页面显示站点上所有用户的userinfo。

路由的工作方式:

Userinfo模型:

class Userinfo < ActiveRecord::Base
    belongs_to :user
    has_many :videos, through: :user

    def info_complete?
        name? && email? && college? && gpa? && major?
    end
end

应用程序控制器:

  def after_sign_in_path_for(resource)
    if resource.userinfo.info_complete?
      root_path
    else 
      new_user_info_path
    end
  end

问题

当用户登录时,如果用户填写了userinfo,我希望它转到用户的个人资料页面,而不是索引或根路径。配置文件路径是“userinfo #show”。对于userinfo #index,不需要id,但要转到“userinfo#show”,需要id。因为userinfo #index是'/ userinfos',而userinfos #show是'/ userinfos / userinfo_id'。我的问题是,如何在用户登录后将用户路由到userinfo#show,个人资料页面以及是否填写了userinfo数据?

这可能很简单,但我觉得我错过了什么。如何访问应用程序控制器中的当前userinfo_id?所以我可以像以下一样路由它:

 def after_sign_in_path_for(resource)
    if resource.userinfo.info_complete?
      userinfo_path(current_user.userinfo_id)
    else 
      new_user_info_path
    end
  end

或者类似于上面的东西?

1 个答案:

答案 0 :(得分:1)

正如在回答这个问题时所做的那样 Dynamic path helpers rails

def after_sign_in_path_for(resource)
  if resource.userinfo.info_complete?
    user_info_path(current_user.userinfo_id)
  else 
    new_user_info_path
  end
end