0

クラス Product の 2 つのオブジェクトを検討してください。

class Product < ActiveRecord::Base {
  :id => :integer,
  :name => :string,
  :total_stock => :integer,
  :cents_retail_sale_amount => :integer,
  :cents_cost_amount => :integer,
  :created_at => :datetime,
  :updated_at => :datetime
}

2 つのオブジェクトがあるとします。

  a{
  :id => 12,
  :name => "Shirt",
  :total_stock => 1,
  :cents_retail_sale_amount => 2500,
  :cents_cost_amount => 2100,
  :created_at => Mon, 23 Jul 2012 16:16:33 CDT -05:00,
  :updated_at => Mon, 23 Jul 2012 17:24:15 CDT -05:00}

  b {
  :id => nil,
  :name => "Polo Shirt",
  :total_stock => 1,
  :cents_retail_sale_amount => 2500,
  :cents_cost_amount => 2100,
  :created_at => Mon, 23 Jul 2012 16:16:33 CDT -05:00,
  :updated_at => Mon, 23 Jul 2012 17:24:15 CDT -05:00}

今ここに私がやろうとしていることがあります:

a.update_attributes(b.to_product.attributes.except("id", "created_at", "updated_at")

ただし、問題 (私が見つけたのは、セント フィールドで検証を行っているためだけです - 0 から 100 ドル (10000 セント) の間の金額のみを許可するためです) は、これです - 私のセント フィールドも更新され、最後に余分な 00 を取得します。小売価格と原価に対して $2500 と $2100 を受け取ります。本当に素晴らしい利益率ですが、現実的ではありません。

明らかに、属性を更新する前に b オブジェクトに対してある種の処理を行うことができます (money フィールドを更新せず、個別に 1 つずつ行うなど) が、それはあまり効率的ではありません。だから私は何か間違ったことをしているのだろうかと思っています

ありがとう

4

1 に答える 1

0

代わりにhttps://github.com/RubyMoney/money-rails gemに切り替えて問題を解決しました

于 2012-08-17T16:44:02.737 に答える