2

使用法と価格の 2 つのレール モデルがあります。これまでのところ、次のようになっています。

class Usage < ActiveRecord::Base
    has_one :price

    def spend
        usage.amount * price.amount
    end
end

class Price < ActiveRecord::Base
    belongs_to :usage
end

コンソールでこれを行うことにより、「支出」を呼び出そうとしています:

Usage.create(amount:100)
Price.create(amount:0.1)

usage=Usage.find(1)
puts usage.price

どこが間違っていますか??

4

3 に答える 3

2

アソシエーションを機能させるには、使用モデルを使用して価格を作成する必要があります。

usage = Usage.create(amount:100)
usage.create_price(amount:0.1)
于 2013-02-07T15:29:31.343 に答える
1

価格は使用量に属するため、最初に使用量オブジェクトを作成し、それを使用して価格オブジェクトを作成する必要があります。

使用法 = 使用法.create(金額:100)

価格 = 使用量.価格.作成(金額:0.1)

次に、使用モデルに関連する価格を取得します。

次に、使用モデルで次のように記述できます。

class Usage < ActiveRecord::Base

  has_one :price

  def spend
    self.amount * (self.price.amount)
  end

end

上記のようにアソシエーションを呼び出すことができますself.price.amount。ここで、「self」は Usage オブジェクトです。

于 2015-12-16T13:32:43.863 に答える
0

問題は、私が行っていた2つのことにありました。モデルで定義された後に新しい関連付けられたオブジェクトを作成する方法を指摘してくれた blamattina に感謝します。

u = Usage.create(amount:100)
u.create_price(amount:0.1)

また、モデル自体では、モデルのインスタンス メソッド内で親クラスを参照する場合、クラスは self として参照する必要があります。

def spend
  self.amount * price.amount
end

その最後のビットは、私が間違っていた場所であり、u.spend を使用すると、簡単に spend を呼び出すことができます。

于 2013-02-08T00:33:45.970 に答える