2

我有两个导轨型号,用法和价格。到目前为止,它们看起来像这样:

class Usage < ActiveRecord::Base
    has_one :price

    def spend
        usage.amount * price.amount
    end
end

class Price < ActiveRecord::Base
    belongs_to :usage
end

我试图通过在控制台中执行此操作来调用“spend”:

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

由于价格属于使用量,所以您应该先创建使用量对象,然后使用它可以创建价格对象。

用法 = Usage.create(数量:100)

价格 = usage.price.create(amount: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

问题在于我正在做的两件事。感谢 blamattina 指出,这是在模型中定义新关联对象后创建新关联对象的方式:

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

此外,在模型本身中,当在模型的实例方法中引用父类时,该类应称为 self:

def spend
  self.amount * price.amount
end

最后一点是我出错的地方,并且可以使用 u.spend 轻松调用支出!

于 2013-02-08T00:33:45.970 回答