Ruby on rails 如何锁定整个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页面)需要访问的任
帐户/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'
,这样我就可以跳过注册/登录前的操作。