1

我是一个菜鸟程序员,如果问题不够清楚,我深表歉意。

我正在尝试创建一个基本的 Rails 应用程序,其中有 3 个不同的表:用法(月,用法)、价格(月、价格)和支出(月、支出)。我试图得到它,以便花费 = usages.usage * prices.price。我已将以下代码放入我的 Spend 模型中:

class Spend < ActiveRecord::Base
  c = Usage.all.count
      i = 1
      while i <= c
          u = Usage.find(i)
          p = Price.find(i)
          Spend.create(month:u.month, spend:u.usage*p.price)
          i += 1
      end
end

这最初效果很好,但是一旦我开始添加和删除用途和价格,它们的 id 就会发生变化,所以它并不那么明确。我怎样才能以更好的方式做到这一点?

谢谢,

凯夫

4

2 回答 2

2

在这种情况下,我不会建立一个单独的Spend模型,因为它所做的只是计算数据库中已经存在的数据。除非您有严格的缓存要求(我怀疑您的情况),否则您可以使用简单的实例方法来检索您想要的数据。

首先弄清楚你的使用和价格模型是如何相关的。由于您似乎是通过 id 关联它们,因此它似乎是一对一的关系(如果我在这方面错了,请纠正我)。但是,通过假设它们具有相同的主键来关联是一种危险的方法 - 而是使用外键让一个模型指向另一个模型。我们将选择Price模型来保存 的主键Usage,但反过来也可以。您需要使用如下迁移添加列:

def change
  add_column :prices, :usage_id, :integer
end

您的模型应如下所示:

class Usage < ActiveRecord::Base
  has_one :price

  def spend
    usage * price.price
  end
end

class Price < ActiveRecord::Base
  belongs_to :usage
end

您可以像这样找到spend单个usage项目的价值:

usage = Usage.find(some_id)
puts usage.spend

或者您可以像这样获得多个“支出”:

Usage.include(:price).each do |usage|
  puts usage.spend
end

我省略了对月份的任何参考,因为我不确定您是如何使用它的,或者是否需要它来计算spend.

于 2013-01-27T20:06:19.460 回答
0

查看 Active Record 关联指南: http: //guides.rubyonrails.org/association_basics.html

于 2013-01-27T19:55:40.707 回答