0

おはようございます。2 つのクラス間で属性をリンクしようとすると、Rails アプリで問題が発生します。もっと詳しく説明しましょう:

私は私のクラス(1つのエリアシステム)のSystemクラスを持っています。どちらも という属性を持っています。エリアの価格は、そこにあるすべてのシステムの価格の合計でなければなりません。belongs_toAreahas_manyprice

システムの価格を変更するたびにエリアの価格を更新することなく、この関係を作成する方法はありますか? (私は次のようなことをします@system.area.price = @system.area.price + @system.price

4

2 に答える 2

0

データベースにトリガーを導入するという暗く危険な道を進みたくない場合を除き、短い答えは実際にはありません。

長い答えは、after_saveこの調整を行うハンドラーが必要だということです。これを適用する方法がリセットではなくインクリメントを行うことを常に確認してください。そうしないと、競合状態が発生します。

あなたの短い例では、あなたが何を求めているのか明確ではありません。エリアに がない限りbase_price、システム価格を無期限に追加し続けます。ここで正確なロジックを作成する必要がありますが、要件の例は次のとおりです。

class System < ActiveRecord::Base
  belongs_to :area
  after_save :update_area_price

protected
  def update_area_price
    self.area and self.area.increment!(:price, self.price)
  end
end
于 2013-08-22T14:38:46.933 に答える