Моя настройка: Rails 2.3.10, Ruby 1.8.7
Я безуспешно экспериментировал с попыткой получить доступ к виртуальному атрибуту в модели из вызова JSON. Допустим, у меня есть следующие модели и код контроллера
class Product
name,
description,
price,
attr_accessor :discounted_price
end
class Price
discount
end
class ProductsController
def show
@product = Product.find(params[:id])
respond_to do |format|
format.html # show.html.erb
format.json { render :json => @product }
end
end
end
Мне нравится, что вывод JSON также включает Product.discounts_price, который рассчитывается в режиме реального времени для каждого вызова, т.е. discounts_price = Price.discount * Product.price Есть ли способ сделать это?
РЕШЕНИЕ:
С первоначальной помощью dmarkow я понял, что мой реальный сценарий более сложный, чем приведенный выше пример. Я могу сделать что-то вроде этого, в модели продукта добавить метод получения
def discounted_price
...# do the calculation here
end
В вызове JSON сделайте это
store = Store.find(1)
store.as_json(:include => :products, :methods => :discounted_price)