Ruby on rails 有没有一种方法可以应用干燥和坚实的原理

Ruby on rails 有没有一种方法可以应用干燥和坚实的原理,ruby-on-rails,ruby,ruby-on-rails-3,dry,solid-principles,Ruby On Rails,Ruby,Ruby On Rails 3,Dry,Solid Principles,我正在编写这段代码,使其变得更短,以便更易于学习或阅读。我已经掌握了应用枯燥而坚实的原则,因此您可以帮助我如何重构这段ruby on rails代码,其中包含一些if语句,以便使用这些原则使代码更易于阅读和缩短 if brand.rating = high if price_reference < 15 price_suggestion = (price_reference - product_database.shipping_cost * 0.75) * 1.1 p

我正在编写这段代码,使其变得更短,以便更易于学习或阅读。我已经掌握了应用枯燥而坚实的原则,因此您可以帮助我如何重构这段ruby on rails代码,其中包含一些if语句,以便使用这些原则使代码更易于阅读和缩短

if brand.rating = high
  if price_reference < 15
    price_suggestion = (price_reference - product_database.shipping_cost * 0.75) * 1.1
    price_original = price_suggestion
  elsif price_reference < 25
    price_suggestion = (price_reference - product_database.shipping_cost * 0.775) * 1.1
    price_original = price_suggestion
  elsif price_reference < 50
    price_suggestion = (price_reference - product_database.shipping_cost * 0.8) * 1.1
    price_original = price_suggestion
  elsif price_reference < 75
    price_suggestion = (price_reference - product_database.shipping_cost * 0.825) * 1.1
    price_original = price_suggestion
  elsif price_reference < 100
    price_suggestion = (price_reference - product_database.shipping_cost * 0.85) * 1.1
    price_original = price_suggestion
  elsif price_reference < 200
    price_suggestion = (price_reference - product_database.shipping_cost * 0.875) * 1.1
    price_original = price_suggestion
  elsif price_reference < 400
    price_suggestion = (price_reference - product_database.shipping_cost * 0.9) * 1.1
    price_original = price_suggestion
  elsif price_reference < 600
    price_suggestion = (price_reference - product_database.shipping_cost * 0.925) * 1.1
    price_original = price_suggestion
  else
    price_suggestion = (price_reference - product_database.shipping_cost * 0.95) * 1.1
    price_original = price_suggestion
elsif brand.rating = low
  if price_reference < 15
    price_suggestion = (price_reference - product_database.shipping_cost * 0.75) * 0.9
    price_original = price_suggestion
  elsif price_reference < 25
    price_suggestion = (price_reference - product_database.shipping_cost * 0.775) * 0.9
    price_original = price_suggestion
  elsif price_reference < 50
    price_suggestion = (price_reference - product_database.shipping_cost * 0.8) * 0.9
    price_original = price_suggestion
  elsif price_reference < 75
    price_suggestion = (price_reference - product_database.shipping_cost * 0.825) * 0.9
    price_original = price_suggestion
  elsif price_reference < 100
    price_suggestion = (price_reference - product_database.shipping_cost * 0.85) * 0.9
    price_original = price_suggestion
  elsif price_reference < 200
    price_suggestion = (price_reference - product_database.shipping_cost * 0.875) * 0.9
    price_original = price_suggestion
  elsif price_reference < 400
    price_suggestion = (price_reference - product_database.shipping_cost * 0.9) * 0.9
    price_original = price_suggestion
  elsif price_reference < 600
    price_suggestion = (price_reference - product_database.shipping_cost * 0.925) * 0.9
    price_original = price_suggestion
  else
    price_suggestion = (price_reference - product_database.shipping_cost * 0.95) * 0.9
    price_original = price_suggestion
else
  if price_reference < 15
    price_suggestion = (price_reference - product_database.shipping_cost * 0.75) * 1
    price_original = price_suggestion
  elsif price_reference < 25
    price_suggestion = (price_reference - product_database.shipping_cost * 0.775) * 1
    price_original = price_suggestion
  elsif price_reference < 50
    price_suggestion = (price_reference - product_database.shipping_cost * 0.8) * 1
    price_original = price_suggestion
  elsif price_reference < 75
    price_suggestion = (price_reference - product_database.shipping_cost * 0.825) * 1
    price_original = price_suggestion
  elsif price_reference < 100
    price_suggestion = (price_reference - product_database.shipping_cost * 0.85) * 1
    price_original = price_suggestion
  elsif price_reference < 200
    price_suggestion = (price_reference - product_database.shipping_cost * 0.875) * 1
    price_original = price_suggestion
  elsif price_reference < 400
    price_suggestion = (price_reference - product_database.shipping_cost * 0.9) * 1
    price_original = price_suggestion
  elsif price_reference < 600
    price_suggestion = (price_reference - product_database.shipping_cost * 0.925) * 1
    price_original = price_suggestion
  else
    price_suggestion = (price_reference - product_database.shipping_cost * 0.95) * 1
    price_original = price_suggestion
end
如果品牌等级=高
如果参考价格<15
价格建议=(价格参考-产品数据库.运输成本*0.75)*1.1
价格\原始=价格\建议
elsif价格参考<25
价格建议=(价格参考-产品数据库.运输成本*0.775)*1.1
价格\原始=价格\建议
elsif价格参考<50
价格建议=(价格参考-产品数据库.运输成本*0.8)*1.1
价格\原始=价格\建议
elsif价格参考<75
价格\建议=(价格\参考-产品\数据库.发货\成本*0.825)*1.1
价格\原始=价格\建议
elsif价格参考<100
价格建议=(价格参考-产品数据库.运输成本*0.85)*1.1
价格\原始=价格\建议
elsif价格参考<200
价格建议=(价格参考-产品数据库.运输成本*0.875)*1.1
价格\原始=价格\建议
elsif价格参考<400
价格建议=(价格参考-产品数据库.运输成本*0.9)*1.1
价格\原始=价格\建议
elsif价格参考<600
价格建议=(价格参考-产品数据库.运输成本*0.925)*1.1
价格\原始=价格\建议
其他的
价格建议=(价格参考-产品数据库.运输成本*0.95)*1.1
价格\原始=价格\建议
elsif brand.rating=低
如果参考价格<15
价格建议=(价格参考-产品数据库.运输成本*0.75)*0.9
价格\原始=价格\建议
elsif价格参考<25
价格建议=(价格参考-产品数据库.运输成本*0.775)*0.9
价格\原始=价格\建议
elsif价格参考<50
价格建议=(价格参考-产品数据库.运输成本*0.8)*0.9
价格\原始=价格\建议
elsif价格参考<75
价格\建议=(价格\参考-产品\数据库.发货\成本*0.825)*0.9
价格\原始=价格\建议
elsif价格参考<100
价格建议=(价格参考-产品数据库.运输成本*0.85)*0.9
价格\原始=价格\建议
elsif价格参考<200
价格建议=(价格参考-产品数据库.运输成本*0.875)*0.9
价格\原始=价格\建议
elsif价格参考<400
价格建议=(价格参考-产品数据库.发货成本*0.9)*0.9
价格\原始=价格\建议
elsif价格参考<600
价格建议=(价格参考-产品数据库.发货成本*0.925)*0.9
价格\原始=价格\建议
其他的
价格建议=(价格参考-产品数据库.运输成本*0.95)*0.9
价格\原始=价格\建议
其他的
如果参考价格<15
价格建议=(价格参考-产品数据库.发货成本*0.75)*1
价格\原始=价格\建议
elsif价格参考<25
价格建议=(价格参考-产品数据库.发货成本*0.775)*1
价格\原始=价格\建议
elsif价格参考<50
价格建议=(价格参考-产品数据库.运输成本*0.8)*1
价格\原始=价格\建议
elsif价格参考<75
价格\建议=(价格\参考-产品\数据库.发货\成本*0.825)*1
价格\原始=价格\建议
elsif价格参考<100
价格建议=(价格参考-产品数据库.发货成本*0.85)*1
价格\原始=价格\建议
elsif价格参考<200
价格建议=(价格参考-产品数据库.运输成本*0.875)*1
价格\原始=价格\建议
elsif价格参考<400
价格建议=(价格参考-产品数据库.发货成本*0.9)*1
价格\原始=价格\建议
elsif价格参考<600
价格建议=(价格参考-产品数据库.发货成本*0.925)*1
价格\原始=价格\建议
其他的
价格建议=(价格参考-产品数据库.发货成本*0.95)*1
价格\原始=价格\建议
终止
可能类似于:

def suggest_price(price_reference, shipping_cost)
  [
     [15, 0.75],
     [25, 0.775],
     [50, 0.8],
     ... etc ...
  ].each do |price_point, shipping_modifier|
    if price_reference < price_point
      return price_reference - shipping_cost * shipping_modifier
    end
  end
  return price_reference - shipping_cost * 0.95
end

def price_modifier(brand)
  if brand.rating == high
    1.1 
  elsif brand.rating == low
    0.9
  else
    1
  end
end

price_original = price_modifier(brand) * suggest_price(price_reference, product_database.shipping_cost)
def建议价格(价格参考、运输成本)
[
[15, 0.75],
[25, 0.775],
[50, 0.8],
等
].每个do |价格|点、装运|修改器|
如果价格参考<价格点
退货价格\参考-运费\成本*运费\修饰符
终止
终止
退货价格参考-运输成本*0.95
终止
def价格_修改器(品牌)
如果品牌评级==高
1.1
elsif品牌评级==低
0.9
其他的
1.
终止
终止
价格\原始=价格\修改人(品牌)*建议价格(价格\参考、产品\数据库、运输\成本)
我并不是说这是完美的代码,但这是一种可以实现的方法。您可能希望价格点和修饰符保持不变。

可能类似于:

def suggest_price(price_reference, shipping_cost)
  [
     [15, 0.75],
     [25, 0.775],
     [50, 0.8],
     ... etc ...
  ].each do |price_point, shipping_modifier|
    if price_reference < price_point
      return price_reference - shipping_cost * shipping_modifier
    end
  end
  return price_reference - shipping_cost * 0.95
end

def price_modifier(brand)
  if brand.rating == high
    1.1 
  elsif brand.rating == low
    0.9
  else
    1
  end
end

price_original = price_modifier(brand) * suggest_price(price_reference, product_database.shipping_cost)
def建议价格(价格参考、运输成本)
[
[15, 0.75],
[25, 0.775],
[50, 0.8],
等
].每个do |价格|点、装运|修改器|
如果价格参考<价格点
退货价格\参考-运费\成本*运费\修饰符
终止
终止
退货价格参考-运输成本*0.95
终止
def价格_修改器(品牌)
如果品牌评级==高
1.1
elsif品牌评级==低
0.9
其他的
1.
终止
终止
价格\原始=价格\修改人(品牌)*建议价格(价格\参考、产品\数据库、运输\成本)
我并不是说这是完美的代码,但这是一种可以实现的方法。你可能会想要
brand = Brand.new(rating: 'high', price_reference: '25')
#let's assume product_database.shipping_cost = 5
brand.prices
 #returns the value 23.2375 which came from (25 - 5 * 0.775) * 1.1