estoy usando Rails 3.2.3 con la gema de dinero-carriles y tengo un modelo de producto que tiene la siguiente:advertencia Deprecation para crear atributo 'moneda'
Mi modelo
class Product < ActiveRecord::Base
attr_accessible :name, :price
composed_of :price,
:class_name => "Money",
:mapping => [%w(price_cents cents), %w(currency currency_as_string)],
:constructor => Proc.new { |cents, currency| Money.new(cents || 0, currency || Money.default_currency) },
:converter => Proc.new { |value| value.respond_to?(:to_money) ? value.to_money : raise(ArgumentError, "Can't convert #{value.class} to Money") }
end
mi prueba
require 'spec_helper'
describe Product do
context "testing money gem" do
it "creates product with price" do
product = Product.create(:price => 200)
product.price.should eq(200)
product.price_cents.should eq(20000)
end
end
end
advertencia Deprecation que estoy recibiendo.
% rspec spec/models/product_spec.rb
Product
testing money gem
DEPRECATION WARNING: You're trying to create an attribute `currency'. Writing arbitrary attributes on a model is deprecated. Please just use `attr_writer` etc. (called from block (3 levels) in <top (required)> at /home/map7/project/spec/models/product_spec.rb:6)
creates product with price
Finished in 0.06682 seconds
1 example, 0 failures
¿Cómo puedo solucionar este problema de advertencia?
actualización
Si agrego 'moneda' de la tabla que empiece a funcionar. ¿Debería hacer esto sin embargo?
Super extraño. No tuve que poner una columna de "moneda" en mi base de datos, ya que es opcional, según la gema. Me di cuenta de que esto solo estaba sucediendo en FactoryGirl si intentaba establecer objetos 'Money' en la columna' price' pero si cambiaba la configuración de 'Entero' a' price_cents' funcionaba bien sin vomitar las advertencias de depreciación. –