gpt4 book ai didi

ruby-on-rails - 如何记住 Controller 中页面之间的参数值

转载 作者:行者123 更新时间:2023-12-03 00:41:28 25 4
gpt4 key购买 nike

我成功地在索引页上生成了一系列三个按钮,使用户能够识别数据库中对象的子集 - 按钮 1 - type =“new”,按钮 2 - type =“used”,按钮3 - 没有限制,即可以是新的或已使用的。

当前index.html.erb包含:

<%= link_to "New", :controller => params[:controller], :action => params[:action],    :product_type => 'New' %>
<%= link_to "Used", :controller => params[:controller], :action => params[:action], :product_type => 'Used' %>
<%= link_to "Don't Restrict", :controller => params[:controller], :action => params[:action], :product_type => nil %>

在product.rb中我有:

scope :by_product_type, lambda{|product_type| where(:product_type => product_type) unless product_type.nil? }

最后我有了productfinder_controller:

before_filter :load_grips, :only => [:index, :bybrand, :bycolour, :byprice]
protected
def load_products
if params[:product_type]
@productssmatchingtype = Product.by_product_type(params[:product_type])
else
@productsmatchingtype = Product
end
end

上面的代码完全按照我的希望工作,首先加载所有项目,并在按下按钮 1 或按钮 2 时限制它们。

我还希望 Productfindercontroller 中的其他 3 个页面(即按价格、按品牌和按颜色)具有类似的功能。我已将上面提供的相同代码放入这 3 个其他 .html.erb 文件中,并且事情似乎再次发生......

异常(exception) - 当加载新页面时,默认情况下会显示所有产品,即它不记得用户在上一页上按下了哪个按钮。是否可以将有关按下的按钮的信息存储在 Controller 中所有页面都可以访问的地方?同样/或者,是否可以定义@productsmatchingtype(在productfinder_controller中),使其可供所有页面访问并且不需要再次从头开始?

最佳答案

您无法记住请求之间的变量。但是您可以在 session 中存储product_type:

def load_products
#get product_type from session if it is blank
params[:product_type] ||= session[:product_type]
#save product_type to session for future requests
session[:product_type] = params[:product_type]
if params[:product_type]
@productssmatchingtype = Product.by_product_type(params[:product_type])
else
@productsmatchingtype = Product
end
end

这应该可以完成工作。

关于ruby-on-rails - 如何记住 Controller 中页面之间的参数值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5003516/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com