【问题标题】:Clearing Session data清除会话数据
【发布时间】:2015-08-14 19:37:47
【问题描述】:

在我看来,我有一个使用 simple_form gem 的按钮:

  <%= simple_form_for(:place_order, :url => "#{}", html: {id: "place_order" }) do |f|  %>
    <%= f.button :button, "Clear Cart", class: "btn btn-primary clearcart", id: "clear_cart", name: "clear_cart" %>
    <%= f.button :submit, "Continue Shopping", class: "btn btn-success contShop", id: "continue_shopping", name: "continue_shopping" %>
    <%= f.button :submit, "Proceed to Checkout", class: "btn btn-danger checkout", id: "proceed_to_checkout", name: "proceed_to_checkout" %>
  <% end %>

我的 CoffeeScript 如下:

jQuery ->
  $('button#clear_cart.btn.btn.btn-primary.clearcart').on 'click', (event) ->
    $.post '/shopping/clear_cart'
  $('input#continue_shopping.btn.btn-success.contShop').on 'click', (event) ->
    $('#place_order').attr 'action', '/shopping'
  $('input#proceed_to_checkout.btn.btn-danger.checkout').on 'click', (event) ->
    $('#place_order').attr 'action', '/shopping/place_order'
  $('input#place_an_inquiry.btn.btn-danger.checkout').on 'click', (event) ->
    $('#place_order').attr 'action', '/shopping/review_order'

我的 clear_cart 来自控制器的操作如下:

def clear_cart
  session[:product_quantity] = nil
  redirect_to shopping_index_path
end

单击 clear_cart 按钮出现 JavaScript 错误,其中 clear_cart 操作不可用,因为我已将其添加到路由文件中。

  resources :shopping, :only => [:index] do
    collection do
      .....
      get   :clear_cart
      post  :clear_cart
    end
  end

我在这里做错了什么,它没有清除会话数据并将我返回到正确的区域?

【问题讨论】:

    标签: javascript ruby-on-rails ruby-on-rails-4 coffeescript


    【解决方案1】:

    顺便说一句,看起来你应该让 rails 进行清理并通过 JS 重定向。

    我会选择类似的东西:

    路线

    resources :shopping, :only => [:index] do
      collection do
        .....
        post  :clear_cart
      end
    end
    

    控制器

    def clear_cart
      session.delete(:product_quantity)
      render json: {success: true, url: shopping_index_path}
    end
    

    js

    $('button#clear_cart.btn.btn.btn-primary.clearcart').on 'click',    (event) ->
      $.post '/shopping/clear_cart'.success(response) ->
        window.location = response.url
    

    【讨论】:

    • 得到 ReferenceError: 响应未定义
    • 看来我无法获取或发布 clear_cart 操作。当它直接点击它时,它确实返回数据,但是当我尝试通过 CoffeeScript 访问它时,我得到了错误。不确定是什么原因造成的。
    • 你应该给你的控制器添加一个 respond_to 块: def clear_cart respond_to do |format| format.js { session.delete(:product_quantity) 渲染 json: {success: true, url: shopping_index_path} } end
    • 无论出于何种原因,我都无法让 JS 能够访问该操作。它认为这与我正在使用的宝石之一有关。
    【解决方案2】:

    正如我在 nesiseka 的 cmets 中提到的那样,我无法按照他的建议进行操作,因此我继续采用以下解决方案。

    控制器:

    def clear_cart
      session.delete(:product_quantity)
      if request.post?
        redirect_to shopping_index_path
      end
    end
    

    查看:

        <%= simple_form_for(:place_order, :url => "#{}", html: {id: "place_order" }) do |f| %>
        <%= f.button :submit, "Clear Cart", class: "btn btn-primary clearcart", id: "clear_cart", name: "clear_cart" %>
        <%= f.button :submit, "Continue Shopping", class: "btn btn-success contShop", id: "continue_shopping", name: "continue_shopping" %>
        <%= f.button :submit, "Proceed to Checkout", class: "btn btn-danger checkout", id: "proceed_to_checkout", name: "proceed_to_checkout" %>
        <% end %>
    

    CoffeeScript:

    jQuery(document).ready ->
      $('input#clear_cart.btn.btn-primary.clearcart').on 'click', (event) ->
        $('#place_order').attr 'action', '/shopping/clear_cart'
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-09-30
      • 1970-01-01
      • 2013-03-28
      • 2016-03-09
      • 1970-01-01
      • 1970-01-01
      • 2016-06-21
      • 1970-01-01
      相关资源
      最近更新 更多