Ruby on Rails,即使用户未登录,也会在应用程序中加载页面

CHa*_*ris 1 ruby ruby-on-rails devise

我正在使用设计.当用户"注册"时,他们会转到他们输入姓名,电子邮件,密码等的页面,然后单击"注册"按钮,如果输入的所有详细信息都正确,他们会进入应用程序,这就是应该发生.

我想要做的是添加一个链接,'通过点击"创建帐户",您确认您接受条款和条件.在注册页面上.就是这样,一个简单的链接 - 没有复选框或任何东西.

在"注册"页面代码我有:

            <div class='t_and_c'>

    By clicking "Create Account" you confirm that you accept 
the <%= link_to "Terms and Conditions.", "static_pages#terms_and_conditions" %>
            </div>
Run Code Online (Sandbox Code Playgroud)

但是每当有人点击链接时,它就会不断重新加载"注册"页面 - 这应该是它应该做的,因为某些代码告诉应用程序在用户登录之前不加载任何内容,所以我的问题是:

如果只是为了这个链接'条款和条件',我可以加载我的terms_and_conditions.html.erb,即使用户没有登录吗?我认为这是一些before_filter或skip_before过滤器,但我不知道如何去做.

Bil*_*han 5

检查你的StaticPagesController是否有任何before_filter,这可能是一些验证方法,以防止访客阅读,除非登录.

如果是这样,只需在"terms_and_conditions"方法上添加一个exclude选项,例如

before_filter :authorize, :except => :terms_and_conditions
Run Code Online (Sandbox Code Playgroud)

要么

before_filter :authorize, :except => [:terms_and_conditions, :other_method_as_well]
Run Code Online (Sandbox Code Playgroud)

根据OP的更新,有before_filter但过滤器在父类中ApplicationController.

在这种情况下,您不能简单地在子类中添加另一个before_filter来尝试覆盖它.这样做会在过滤器链中再添加一个过滤器.

该解决方案是使用skip_before_filter这样的

StaticPagesController < ApplicationController
  skip_before_filter :authenticate_user!, only: :terms_and_conditions
Run Code Online (Sandbox Code Playgroud)

方法参考: http ://apidock.com/rails/AbstractController/Callbacks/ClassMethods/skip_before_filter