Ruby on rails 如何锁定整个Rails应用程序,直到用户完成帐户设置

Ruby on rails 如何锁定整个Rails应用程序,直到用户完成帐户设置,ruby-on-rails,ruby,model-view-controller,actioncontroller,clearance,Ruby On Rails,Ruby,Model View Controller,Actioncontroller,Clearance,我有一个rails应用程序,它使用用于注册和登录。注册后,用户将被重定向到帐户/new,以完成帐户设置。帐户属于用户,用户拥有一个帐户。(帐户模型和用户模型是分开的,因为有一些属性,例如我不想放在用户模型中的“公司名称”。) 我想锁定应用程序中的所有内容,并将它们重定向到帐户/new,如果他们在创建帐户之前尝试访问营销页面、注册和登录页面以外的任何内容 我认为在应用程序控制器中添加一个操作之前是正确的方法,然后在创建帐户之前(例如/signup或/login或marketing页面)需要访问的任

我有一个rails应用程序,它使用用于注册和登录。注册后,用户将被重定向到
帐户/new
,以完成帐户设置。帐户
属于
用户,用户
拥有一个
帐户。(帐户模型和用户模型是分开的,因为有一些属性,例如我不想放在用户模型中的“公司名称”。)

我想锁定应用程序中的所有内容,并将它们重定向到
帐户/new
,如果他们在创建帐户之前尝试访问营销页面、注册和登录页面以外的任何内容

我认为在应用程序控制器中添加一个
操作之前
是正确的方法,然后在创建帐户之前(例如/signup或/login或marketing页面)需要访问的任何
控制器上使用
:在操作之前跳过

这似乎是正确的方法,因为如果用户没有创建帐户,整个应用程序将默认锁定。通过根据需要显式使用
:在执行操作之前跳过
,似乎不太可能错误地在应用程序中创建漏洞

但是,我无法让ApplicationController上的
before_action
正常工作,因为当我访问/signup:

NoMethodError in Clearance::UsersController#new
undefined method `account' for nil:NilClass
我正在尝试这样做:

class ApplicationController < ActionController::Base
  include Clearance::Controller
  before_action :require_login
  before_action :require_account

  private

  def require_account
    if current_user.account != nil
      redirect_to dashboard_path
    end
  end
end
class ApplicationController
当我在AccountsController中重定向我的
帐户#new
操作时,这种语法就起作用了,但现在我很难弄清楚如何在整个应用程序中获得相同的行为。注:
当前用户
是Clearance提供的一种方法


什么是“Rails方法”?

< P>如果我理解正确,我认为你在“Ruby on Rails方法”中是正确的方法! 导致该错误的原因是,在应用程序的某些上下文中,您没有当前用户方法

如果您希望在当前用户已拥有帐户时将用户重定向到
仪表板路径
,则应尝试以下操作:

class ApplicationController

<> P>这样,当<代码> CurrngUsAube存在时,您可以获得重定向:<代码> >强> >代码> CurrntUnter用户有一个帐号,不需要代码> SkpIfPrimeActudio。

< P>如果我理解正确,我认为您在Ruby on Rails方法中是正确的方式! 导致该错误的原因是,在应用程序的某些上下文中,您没有当前用户方法

如果您希望在当前用户已拥有帐户时将用户重定向到
仪表板路径
,则应尝试以下操作:

class ApplicationController

这样,当
当前用户在场时,您可以获得重定向
并且
当前用户有一个帐户
,无需在需要操作之前跳过

怎么办?怎么办?我想如果当前用户和帐户
的话,条件可以缩短为

好评论!我写
current\u user和¤t\u user.account.present?
只是为了提高阅读效果,在实际情况下,如果current\u user和.account
,我更喜欢
!谢谢如果current\u user和current\u user.account.blank?
的话,预期的行为实际上是
,但这确实帮助我达到了目的。这是我最终得到的应用程序控制器-。和账户控制员。另外,造成问题的另一个“问题”是,我必须将我的路线从
get'/signup'=>“clearance/users#new”更新为:“signup'
get'/signup'=>“users#new”,例如:“注册”
,这样我就可以跳过注册/登录前的操作。我认为如果当前用户和帐户的评论不错,条件可以缩短为
!我写
current\u user和¤t\u user.account.present?
只是为了提高阅读效果,在实际情况下,如果current\u user和.account
,我更喜欢
!谢谢如果current\u user和current\u user.account.blank?
的话,预期的行为实际上是
,但这确实帮助我达到了目的。这是我最终得到的应用程序控制器-。和账户控制员。另外,造成问题的另一个“问题”是,我必须将我的路线从
get'/signup'=>“clearance/users#new”更新为:'signup'
get'/signup'=>“users#new',更新为:'signup'
,这样我就可以跳过注册/登录前的操作。