Mat*_*ijs 7 ruby ruby-on-rails spree
在我的实习期间,我需要在rails项目上使用现有的ruby.这个项目是用狂欢建造的.在我调整价格过滤器之前的开发人员,以便范围将变为该分类单元产品的最大值.这里的代码是"lib/spree/core/product_filter.rb"
Spree::Product.add_search_scope :price_range_any do |*opts|
opts_arr, max_prod, min_prod = [], nil, nil
opts.each do |opt|
tmp_arr = opt.split("+")
opts_arr << tmp_arr[0]
max_prod = tmp_arr[1]
min_prod = tmp_arr[2]
end
conds = opts_arr.map {|o| Spree::Core::ProductFilters.price_filter(max_prod.to_i, min_prod.to_i)[:conds][o]}.reject { |c| c.nil? }
scope = conds.shift
conds.each do |new_scope|
scope = scope.or(new_scope)
end
Spree::Product.joins(master: :default_price).where(scope)
end
def ProductFilters.format_price(amount)
Spree::Money.new(amount)
end
def ProductFilters.price_filter(max_price = nil, min_price = nil)
v = Spree::Price.arel_table
if max_price < 200
if max_price < 100
highest_price = max_price - max_price.modulo(10)
else
highest_price = max_price - max_price.modulo(25)
end
interval = (highest_price)/5
second = interval + interval
third = second + interval
conds = [ [ "#{format_price(0)} - #{format_price(interval)}" , v[:amount].in(0..interval)],
[ "#{format_price(interval)} - #{format_price(second)}" , v[:amount].in(interval..second)],
[ "#{format_price(second)} - #{format_price(third)}" , v[:amount].in(second..third)],
[ "#{format_price(third)} - #{format_price(highest_price)}" , v[:amount].in(third..highest_price)],
[ Spree.t(:or_over_price, price: format_price(highest_price)) , v[:amount].gteq(highest_price)]]
{
name: Spree.t(:price_range),
scope: :price_range_any,
conds: Hash[*conds.flatten],
labels: conds.map { |k,v| [k, k] }
}
else
conds = [ [ "#{format_price(0)} - #{format_price(50)}" , v[:amount].in(0..50)],
[ "#{format_price(50)} - #{format_price(100)}" , v[:amount].in(50..100)],
[ "#{format_price(100)} - #{format_price(150)}" , v[:amount].in(100..150)],
[ "#{format_price(150)} - #{format_price(200)}" , v[:amount].in(150..200)],
[ Spree.t(:or_over_price, price: format_price(200)) , v[:amount].gteq(200)]]
{
name: Spree.t(:price_range),
scope: :price_range_any,
conds: Hash[*conds.flatten],
labels: conds.map { |k,v| [k, k] }
}
end
end
Run Code Online (Sandbox Code Playgroud)
它正在工作,在价格范围过滤器中,当最高价格上涨但过滤器不过滤产品时更改了范围.
到目前为止,我尝试了所有我知道的红宝石,但似乎没有任何帮助.我在评论add_search_scope的键值时没有任何变化的示例.
你能告诉我什么出错吗?
| 归档时间: |
|
| 查看次数: |
687 次 |
| 最近记录: |