1

私は次の問題に直面しています。レール上のルビーの初心者であり、after_saveコールバックを完全に理解することもできないため、立ち往生しています

    class StoreOpeningStock < ActiveRecord::Base
     after_save :add_stock

     def add_stock
        s = Stock.find_by_product_id(self.product_id)
        if s.product_id?
        s.update_attributes(:product_id => self.product_id, :quantity => self.quantity, :price => self.price)
        else    
        Stock.create(:product_id => self.product_id, :quantity => self.quantity, :price => self.price)
  end
    end
    end

私はこれをエラーとして取得しています

未定義のメソッドproduct_id

基本的に、ストックに商品があるかどうかを確認するだけですか?はいの場合.. 更新する 他の場合 新しい在庫を作成する.. 問題は s.product_id にあると感じます...しかし、確かではありません..この件に関するガイダンスは大いに役立ちます...事前に感謝します。

4

1 に答える 1

3

問題はこのコードのチャンクにあると思います:

if s.product_id?

おそらくproduct_id?メソッドは存在しません。おそらく、必要なのは次のようなものです。

if s

これにより、前のクエリのsがデータベースに存在するかどうかがチェックされます。sがnilの場合、新しいレコードを作成します。

于 2012-06-20T12:33:00.200 に答える