3

すべての前に私はあなたの助けに感謝したいと思います

私はこのようなモデルを持っています:

  attr_protected nil
  belongs_to :product
  belongs_to :user
  before_create :add_ammount

  def carted_product_price(ammount, price)
    ammount * price
  end

  def add_ammount
    carted_product = CartedProduct.where(:product_id => self.product_id, :user_id => self.user_id)
    if carted_product
      carted_product.first.ammount += self.ammount
      carted_product.first.update_attributes(:ammount => carted_product.first.ammount)
    else
      self.save
    end
  end

これにより、ユーザーと製品に接続されたCarted_Productsというテーブルに購入注文が保存されます。

問題は、Before createが実行されるときに、テーブル内のレコードを更新して、レコードがすでに存在する場合はコントローラーから渡された量を追加し、存在しない場合は、ivが実行する限り、量を更新しますが、それでも渡されたパラメータを順番に使用して新しいものを作成します。レコードが見つかったときに両方のアクションを実行するのではなく、更新するだけにします。

あなたの忍耐のためのthnx

編集:

属性の更新後にfalseを返そうとしましたが、フィルターがキャンセルされ、属性を作成または更新しません

4

2 に答える 2

5

フィルタに戻りfalsebefore_createオブジェクトフォームが保存されないようにします。add_amountオブジェクトの保存については責任を負わないため、save単独で呼び出すことはできません。

于 2012-07-20T02:34:32.350 に答える
0

before_createフィルターではこれを行うことはできません。CartedProduct呼び出しているコントローラーに存在するものをフェッチする必要がありますcreate

于 2016-01-14T10:23:00.523 に答える