我有点菜鸟程序员,所以如果问题不够清楚,请道歉。
我正在尝试创建一个基本的 rails 应用程序,其中我有 3 个不同的表:使用情况(月,使用情况)、价格(月、价格)和支出(月、支出)。我正在尝试获得它,以便花费=使用情况.使用情况*价格。我已将以下代码放入我的支出模型中:
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 就会发生变化,所以它不那么清晰。我怎样才能以更好的方式做到这一点?
谢谢
凯文
在这种情况下,我倾向于制作一个单独的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
您可以像这样找到单个usage
项目的spend
值:
usage = Usage.find(some_id)
puts usage.spend
或者,您可以像这样获得多个"支出":
Usage.include(:price).each do |usage|
puts usage.spend
end
我省略了对月份的任何引用,因为我不确定您如何使用它,或者是否需要它来计算spend
。
请查看活动记录关联指南:http://guides.rubyonrails.org/association_basics.html