У меня есть рабочий скрипт, фильтрующий мои результаты с помощью Active Record Scoping. Все отлично работает, когда я хочу фильтровать, сравнивая параметры с данными из базы данных.
Но у меня есть некоторая функция, подсчитывающая цену автомобиля внутри _car. html .erb частичная, результат этой функции зависит от результата параметров.
Как я могу отображать результаты поиска по результатам этой функции и показывать только автомобили по цене ниже определенной (определенной в параметрах).
Некоторый код, чтобы сделать его более понятным:
car.rb (файл модели)
scope :price_leasing, -> (price_leasing) { where('price_leasing <= ?', price_leasing) }
# for now price_leasing is getting price from database
scope :brand, -> (brand) { where brand: brand }
scope :car_model, -> (car_model) { where car_model: car_model }
scope :category, -> (category) { where category: category }
cars_controller.rb (файл контроллера)
def index
@cars = Car.where(nil)
@cars = @cars.price_leasing(params[:price_leasing]) if params[:price_leasing].present?
@cars = @cars.brand(params[:brand]) if params[:brand].present?
@cars = @cars.car_model(params[:car_model]) if params[:car_model].present?
@cars = @cars.category(params[:category]) if params[:category].present?
@brands = Brand.all # importing all car brands into filters
end
в индексе. html .erb У меня есть код "render @cars"
<%=
if @cars.size > 0
render @cars.where(:offer_status => 1)
else
render html: '<p>Nie znaleziono pasujących wyników.</p>'.html_safe
end
%>
внутри _car. html .erb-файла У меня есть функция из помощника
<h3 class="car-cell__price"><%= calculate_car_price(car.price, car.id) %> <span class="car-cell__light-text">zł/mc</span></h3>
моя функция Calculate_car_price () внутри помощника
def calculate_car_price(car_price, car_id)
car = Car.find(car_id)
fullprice = car_price
if params[:price_leasing].present?
owncontribution = params[:price_leasing].to_i
else
owncontribution = car.owncontribution
end
pv = fullprice - owncontribution + (0.02 * fullprice)
if params[:period].present?
carperiod = params[:period].to_i
carprice = (Exonio.pmt(0.0522/60, carperiod, pv)) * -1
else
carprice = (Exonio.pmt(0.0522/60, 60, pv)) * -1
end
p number_with_precision(carprice, precision: 0)
end
Я бы хотел, чтобы область видимости в результате этой функции. Является ли это возможным?