Tôi đang sử dụng Rails 3.2.3 với số tiền-ray đá quý và tôi đã có một mô hình sản phẩm trong đó có những điều sau đây:cảnh báo Deprecation để tạo thuộc tính 'tệ'
Mô hình của tôi
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
Bài kiểm tra của tôi
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
Cảnh báo về việc ngừng sử dụng Tôi nhận được.
% 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
Làm cách nào để khắc phục cảnh báo không dùng nữa này?
Cập nhật
Nếu tôi thêm 'tệ' vào bảng nó bắt đầu làm việc. Tôi có nên làm điều này không?
Siêu lạ. Tôi không phải đặt một cột "tiền tệ" trong cơ sở dữ liệu của tôi, vì đây là tùy chọn, theo gem. Tôi nhận thấy điều này chỉ xảy ra trong FactoryGirl của tôi nếu tôi cố gắng đặt các đối tượng 'Money' thành cột' price' nhưng nếu tôi thay đổi để đặt 'Integer' cent thành' price_cents' thì nó hoạt động tốt mà không có cảnh báo ngừng sử dụng. –