Вы можете применить ООП. В классе Brand
вы можете использовать некоторые операторы .case
, чтобы сделать его более читабельным ...
def prices
case self.rating
when 'high"
case
when price_reference < 15
(price_reference - product_database.shipping_cost * 0.75) * 1.1
when price_reference < 25
(price_reference - product_database.shipping_cost * 0.775) * 1.1
when price_reference < 50
(price_reference - product_database.shipping_cost * 0.8) * 1.1
etc...
when 'low'
case
etc...
else
etc...
end
end
Вложенный оператор case
немного проще для чтения. Также вы делаете много ненужных переназначений переменных. Помните, что Ruby всегда возвращает последнее утверждение, которое он оценивает. Поэтому, когда вы вызываете метод члена класса Brand, вы можете использовать его следующим образом:
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
Есть много способов сделать это. Вы можете абстрагировать намного больше своего кода, создав несколько хеш-словарей, которые будут содержать значения каждой формулы, а затем выполнить подстановку переменных для их вызова. Попробуй вещи с точки зрения объектов и методов. Все в Ruby - это какой-то объект, и вы можете создавать методы для вызова тех объектов, которые вызывают другие методы и используют другие объекты.