私はitem
モデルを持っており、総利益から任意の料金を控除して計算する必要があります。私は現在、モデルで現在これをやっています。しかし、ブール値が販売されるように更新されると、その計算を実行できるようにしたい。私はモデルでif文を試しましたが、うまくいきませんでした。レンタルモデルの計算条件が一致する場合のみ
item.rb
class Item < ActiveRecord::Base
def profit_calc
sold_for - bought_for - fees - shipping rescue 0
end
def self.purchase_total
sum(:bought_for)
end
def self.fee_total
sum(:fees)
end
def self.shipping_total
sum(:shipping)
end
def self.sales_total
sum(:sold_for)
end
def self.profit_total
sum(:sold_for) - sum(:bought_for) - sum(:fees) - sum(:shipping)
end
scope :visible, -> { where(sold: false) }
scope :sold, -> { where(sold: true) }
end
schema.rb
create_table "items", force: :cascade do |t|
t.string "description"
t.float "bought_for"
t.float "sold_for"
t.float "fees"
t.float "shipping"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
t.boolean "sold", default: false
end
あなたは計算にsold
スコープを使用することができます
<td><%= number_to_currency(@items.profit_total) %></td>
計算後にtotal_profitをデータベースに保存しますか? – Muntasim
@Muntasimいいえ、それは必要ではありません。 –
@MikeWiesenhartでは、 'if::sold_changed?'という条件で 'after_save'を使用できます。コールバックメソッド内で' do ... something if self.sold? 'を確認できます。 – dp7