加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby-on-rails – 如何记住控制器中页面之间的参数值

发布时间:2020-12-17 03:27:06 所属栏目:百科 来源:网络整理
导读:我已设法在索引页面上生成一系列三个按钮,使用户能够识别数据库中对象的子集 – 按钮1 – 类型=“新”,按钮2 – 类型=“已使用”,按钮3 – 否限制即可以是新的或使用的. 目前index.html.erb包含: %= link_to "New",:controller = params[:controller],:acti
我已设法在索引页面上生成一系列三个按钮,使用户能够识别数据库中对象的子集 – 按钮1 – 类型=“新”,按钮2 – 类型=“已使用”,按钮3 – 否限制即可以是新的或使用的.

目前index.html.erb包含:

<%= link_to "New",:controller => params[:controller],:action => params[:action],:product_type => 'New' %>
<%= link_to "Used",:product_type => 'Used' %>
<%= link_to "Don't Restrict",: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个页面上具有类似的功能,即byprice,bybrand和bycolour.我已经在上面提供的其他3个.html.erb文件中添加了与上面提供的相同的代码,并且事情似乎也在表现……

除外 – 当加载新页面时,默认是显示所有产品,即它没有记住用户在上一页上按下的按钮.是否可以存储控制器中所有页面都可以访问的按钮信息?类似地/或者,是否可以以这样的方式定义@productsmatchingtype(在productfinder_controller中),使得所有页面都可以访问它并且不需要再次从头开始?

解决方法

你无法记住变量beetwen请求.但是,您可以在会话中存储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

那应该做的.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读