Прежде всего, я думаю, вам нужно немного подумать о структуре вашей базы данных.
Какие у вас отношения между Продуктами и Услугами?
Насколько я понимаю, продукт может иметь несколько сервисов, и сервис может быть активным для нескольких продуктов. Это звучит как ассоциация n-> m для меня.
Если это так, вы должны настроить таблицы следующим образом:
class Product < ActiveRecord::Base
has_many :product_services
has_many :services, through: :product_services
has_many :prices
has_many :addons
belongs_to :product_cat
end
class ProductServices < ActiveRecord::Base
belongs_to :product
belongs_to :service
end
class Service < ActiveRecord::Base
has_many :product_services
has_many :products, through: :product_services
belongs_to :user
belongs_to :location
end
class Location < ActiveRecord::Base
has_one :currency
has_many :services
end
При такой настройке получение цены на продукт должно быть довольно простым.
Если у вашего продукта есть базовая цена, и у всех ваших услуг есть цена, то общая цена продукта представляет собой сумму базовой цены и всех цен отдельных услуг.
Теперь, когда у вас есть свои ассоциации, вы можете получить к ним доступ с помощью следующего:
product.services # returns all of the services for the specific product.
product.services.sum(:price) # returns the sum of all the individual prices of each service.
Надеюсь, это поможет вам в реализации вашего ценового решения. Это может быть сложной проблемой, но Rails предоставляет несколько способов сделать это проще. В качестве примечания, вы действительно должны взглянуть на документацию active_record, она полна информации, которая облегчит вашу жизнь.
Ура!