基本上,我在页面中有多个选择框。当选择框被更改时,我想在会话中放入所有被选中的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调用之后立即重新加载会话数据。
Side-problem:这段代码一切正常,我不知道为什么我认为我通过ajax填充会话违反了一些Rails做法?
我发现的类似问题是:Rails not reloading session on ajax post
我尝试了这个解决方案,但结果是一样的。