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