Ma configuration: Rails 2.3.10, Ruby 1.8.7Accès attribut virtuel à partir JSON
Je l'ai expérimenté, sans succès, en essayant d'accéder à un attribut virtuel dans un modèle à partir d'un appel JSON. Disons que je les modèles suivants et le code du contrôleur
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
Ce que je veux est d'avoir la sortie JSON comprennent également Product.discounted_price qui est calculé en temps réel pour chaque appel, soit discounted_price = Price.discount * Produit .prix. Y a-t-il un moyen d'accomplir cela?
SOLUTION: Avec l'aide initiale de dmarkow, j'ai tout compris, mon scénario réel est plus complexe que l'exemple ci-dessus. Je peux faire quelque chose comme ça, dans le modèle de produit, ajoutez une méthode getter
def discounted_price
...# do the calculation here
end
Dans l'appel JSON faire ce
store = Store.find(1)
store.as_json(:include => :products, :methods => :discounted_price)
Pourquoi avez-vous le prix comme une autre classe? – s84
Ok, mauvais exemple mais pour le bien de la discussion, supposons que j'ai besoin de faire ça :) – Bob