在AJAX调用之后,Rails不会立即重新加载会话数据,而只是在重新加载整个页面时?

时间:2014-01-14 19:15:53

标签: ruby-on-rails ajax jquery session

基本上,我在页面中有多个选择框。当选择框被更改时,我想在会话中放入所有被选中的id(一个或多个)。我需要这样的东西的原因如下:

创建新产品用户可以根据所选选项创建该产品的多种变体(例如:颜色和尺寸)(上面提到的ID)。 例如,一个产品可以有2个变种(黑色T恤,XL大小,绿色T恤,大小L)

首先,我在产品控制器中创建了POST路由,通过AJAX我将发送选定的选项:

resources :products do
    collection do
      post 'ajaxify_options'
    end
  end

Ajax代码

$('#variant-options').change(function() {
    var option_values = [];

    $("#variant-options option:selected").each(function() {
      option_values.push($(this).val());
    });

    $.ajax({
      url: '/products/ajaxify_options',
      type: 'POST',
      data: ({'ids': option_values})
    });

  });

ajaxify_options操作

def ajaxify_options (inside product controller)
    set_option_values params[:ids]
    head :ok, :content_type => 'text/html'
end

此处set_option_values ApplicationController中的方法定义为:

def set_option_values option_values
    session[:option_values] = [] if session[:option_values].nil?
    session[:option_values] = option_values
end

还使用get方法(在helper_method内实施为ApplicationController

def get_option_values
    return [] if session[:option_values].nil?
    session[:option_values]
end

所以现在当用户通过get_option_values选择选项(一个或多个)时,我可以从我需要的任何地方访问选定的选项(部分用于创建新产品和变体)。

主要问题:当用户选择一个或多个选项时,通过调试我看到ajax或服务器端代码没有错误一切都很好,我可以检查所选选项的值。 但只有当我重新加载整页时,我才会在AJAX调用之后立即重新加载会话数据。

enter image description here

Side-problem:这段代码一切正常,我不知道为什么我认为我通过ajax填充会话违反了一些Rails做法?

我发现的类似问题是:Rails not reloading session on ajax post
我尝试了这个解决方案,但结果是一样的。

0 个答案:

没有答案