Ruby on rails 表单无法处理Rails 4中拒绝访问的重定向

Ruby on rails 表单无法处理Rails 4中拒绝访问的重定向,ruby-on-rails,Ruby On Rails,我正在使用Desive和CanCanCan开发Rails 4 web应用程序 当用户首次注册创建帐户时,他们将被重定向到订阅页面,在该页面中输入信用卡详细信息等 用户创建->订阅创建=表单工作 这是绝对完美的工作,一旦他们进入他们的订阅信息,权限的变化是对他们的帐户,然后他们可以访问该网站的一个新的部分。一切都好 现在我遇到的问题是,如果一个用户注册,然后试图在不订阅的情况下访问站点的这个新部分,我会将他们重定向到订阅页面。然而,当我这样做时,表单就是不起作用。他们点击提交,什么也没发生 用户创

我正在使用Desive和CanCanCan开发Rails 4 web应用程序

当用户首次注册创建帐户时,他们将被重定向到订阅页面,在该页面中输入信用卡详细信息等

用户创建->订阅创建=表单工作

这是绝对完美的工作,一旦他们进入他们的订阅信息,权限的变化是对他们的帐户,然后他们可以访问该网站的一个新的部分。一切都好

现在我遇到的问题是,如果一个用户注册,然后试图在不订阅的情况下访问站点的这个新部分,我会将他们重定向到订阅页面。然而,当我这样做时,表单就是不起作用。他们点击提交,什么也没发生

用户创建->尝试访问资源,被重定向到 订阅创建=表单不工作

以下是我用于执行重定向的代码:

application_controller.rb    

def access_denied(exception)
        redirect_to(new_subscription_path, alert: exception.message + " Please subscribe.")
    end
奇怪的是,当他们第一次创建用户帐户时,我使用完全相同的代码重定向。如下所示:

registrations_controller.rb

    def after_sign_up_path_for(resource)
        new_subscription_path
    end
以下是订阅控制器的代码:

class SubscriptionsController < ApplicationController

    before_filter :authenticate_user!

    def new
        @subscription = Subscription.new
    end

    def create
        @subscription = Subscription.new(subscription_params)
        @user = current_user
        @subscription.user_id = current_user.id
        if @subscription.save_with_payment
            redirect_to success_path, :notice => "Thank you for subscribing!"
            if current_user.role = "guest"
                User.update(current_user.id, role: "read")
            end
            UserMailer.subscription_welcome_email(@user).deliver
        else
            render :new
        end
    end

    def show
        @subscription = Subscription.find(params[:id])
    end

    def destroy
        @subscription = Subscription.find_by(user_id: current_user.id)
        User.update(current_user.id, role: "guest")
        unless @subscription.stripe_customer_id.nil?
            customer = Stripe::Customer.retrieve(@subscription.stripe_customer_id)
            customer.subscriptions.retrieve(customer.subscriptions.first.id).delete
        end
        @user = current_user
        UserMailer.subscription_destroy_email(@user).deliver
        @subscription.destroy

    rescue Stripe::StripeError => e
        logger.error "Stripe Error: " + e.message
        errors.add :base, "Unable to cancel your subscription. #{e.message}."
        false
    end


    def subscription_params
        params.require(:subscription).permit(:stripe_card_token, :last_4_digits, :plan, :expiry_month, :expiry_year)
    end


end
class subscriptioncontroller“感谢您的订阅!”
如果当前用户为\u user.role=“来宾”
User.update(当前_User.id,角色:“读取”)
终止
UserMailer.subscription\u welcome\u email(@user.deliver)
其他的
渲染:新
终止
终止
def秀
@subscription=subscription.find(参数[:id])
终止
def销毁
@订阅=订阅。查找方式(用户\u id:当前\u用户.id)
User.update(当前_User.id,角色:“来宾”)
除非@subscription.stripe\u customer\u id.nil?
customer=Stripe::customer.retrieve(@subscription.Stripe\u customer\u id)
customer.subscriptions.retrieve(customer.subscriptions.first.id).删除
终止
@用户=当前用户
UserMailer.subscription\u destroy\u email(@user.deliver)
@订阅。销毁
救援条带::条带错误=>e
logger.error“条带错误:”+e.message
errors.add:base,“无法取消订阅。#{e.message}。”
错误的
终止
def订阅参数
参数要求(:订阅)。许可(:条带卡令牌,:最后4位,:计划,:到期月,:到期年)
终止
终止
表格编号:

<div class='panel panel-default'>

    <div class='panel-heading'>
        <h2>Subscribe</h2>
    </div>

    <div class='panel-body'>

        <%= semantic_form_for @subscription, :html => {:class => 'main-form'} do |f| %>

        <font color=red><b><%= f.semantic_errors *f.object.errors.keys %></b></font>

        <%= f.hidden_field :stripe_card_token %>

        <div id='stripe_error' class="alert alert-info" style='display:none'>
        </div>


        <span class="help-block">Nothing is billed to your card for 7 days. <b>Guaranteed. </b>
            <br>If you choose to continue after 7 days, only then will you be billed.</span>

              <div class='form-group'>
                  <%= label_tag :card_number, "Credit Card Number" %><%= image_tag "welcome/checkout/amex.png", alt: "American Express", class: "credit-card-image" %><%= image_tag "welcome/checkout/mastercard.png", alt: "Mastercard", class: "credit-card-image" %><%= image_tag "welcome/checkout/visa.png", alt: "Visa", class: "credit-card-image" %>
                  <%= text_field_tag :card_number, nil, name: nil, class: 'form-control input-box', :placeholder => 'Credit Card Number' %>
              </div>

        <div class='row'>

            <div class="col-xs-6">
                <%= label_tag :card_code, "Security Code on Card (CVC)" %><%= image_tag "welcome/checkout/credit.png", alt: "Credit Card Image", class: "credit-card-image" %>
                <%= text_field_tag :card_code, nil, name: nil, class: 'form-control input-box', :placeholder => 'Security Code on Card (CVC)' %>

              </div>

            <div class="col-xs-6">
                <%= label_tag :card_month, "Card Expiration" %><br>
                <%= select_month nil, {add_month_numbers: true}, {name: nil, id: "card_month", class: 'expiration'} %>
                <%= select_year nil, {start_year: Date.today.year+1, end_year: Date.today.year+15}, {name: nil, id: "card_year", class: 'expiration'} %>
                </div>
            </div>

        </div>

<div id="stripe_error">
  <noscript>JavaScript is not enabled and is required for this form. First enable it in your web browser settings.</noscript>
</div>

            <div>
                <%= f.submit "Subscribe", class: 'btn standard-button' %>
            </div>


        <% end %>
    </div>

</div>

订阅
{:class=>main form}do | f |%>
7天内不向您的卡支付任何费用。放心。

如果您选择在7天后继续,只有在7天后您才会收到账单。 '信用卡号码'%> “卡上安全代码(CVC)”%>
未启用JavaScript,此表单需要JavaScript。首先在web浏览器设置中启用它。
有人能帮忙吗?如果需要额外的代码,请告诉我。谢谢


编辑:只是为了让事情变得奇怪,只有当我在导航中点击一个新路径链接时,才会发生此错误。。如果我手动键入许可资源的URL,则拒绝访问可以正常工作。标题中使用的路径是否有问题?我需要把一些具体的信息传递给它吗?我还尝试通过添加控制台日志来检查它是否是JavaScript,但没有任何结果,因此我认为这不是一个问题,尽管感觉它像是JS问题。

您应该检查您的JavaScript。很明显,它阻碍了表单的提交。我已经看了您前面的问题,您的
handleStripeResponse
处理程序似乎总是进入
else
条件块,结果是不提交表单。我敢打赌,
$('meta[name=“stripe key”]”)。在重定向后,attr('content')
是未定义的。

禁用Turbolinks解决了此问题。

日志中有什么内容,您可以发布控制器代码并查看订阅的代码吗添加了hey@japed代码。日志绝对没有说什么不幸的是,在提交表单时,您在console.log开发者工具中看到了什么-听起来像是与javascript相关的。其中没有任何内容:(感谢您的回复!有什么原因可以解释为什么它可以使用第一个描述的路径,但不能使用另一个路径吗?好的,我在控制台的日志中添加了else条件以进行检查,并且它似乎没有触发,所以不确定还需要做什么。它确实感觉像是JS问题though@bnussey你试过注释你的JS相关代码吗?它的哪一部分?是的我觉得JS在第一条路径中正常工作,而在另一条路径中正常工作是没有道理的。它不应该在两条路径中都工作吗?好的,我已经计算出它的涡轮链接造成了损坏。原因是jQuery库没有被加载