Ruby on rails 如何使用Rails中文档中的现有值从mongoid类运行方法?
我真的找不到关于这个问题的任何东西,而且我也找不到更好的方式来描述这个问题,所以如果这个问题不好,我真的很抱歉 我有一个简单的模型:Ruby on rails 如何使用Rails中文档中的现有值从mongoid类运行方法?,ruby-on-rails,mongoid,Ruby On Rails,Mongoid,我真的找不到关于这个问题的任何东西,而且我也找不到更好的方式来描述这个问题,所以如果这个问题不好,我真的很抱歉 我有一个简单的模型: field :weight, type: Integer field :height, type: Integer 我想实际计算并保存体重指数(这是一个简单的数学公式),在一个新的领域。在我的研究中,我有两个选择,但我不确定这是正确的方法还是我运气好 第一种方法:使用默认值 从rails控制台进行实例化工作: a = Tmodel.new(weight: 70,
field :weight, type: Integer
field :height, type: Integer
我想实际计算并保存体重指数(这是一个简单的数学公式),在一个新的领域。在我的研究中,我有两个选择,但我不确定这是正确的方法还是我运气好
第一种方法:使用默认值
从rails控制台进行实例化工作:
a = Tmodel.new(weight: 70, height: 170)
=> #<Tmodel _id: 535fe9506c75730fe8000000, created_at: nil, updated_at: nil, weight: 70.0, height: 170, bmi: 24.221453287197235>
从控制台:
b = Tmodel.new(weight: 70, height: 170)
=> #<Tmodel _id: 535feab26c757315a4000000, created_at: nil, updated_at: nil, weight: 70.0, height: 170, bmi: nil>
b.save
b
=> #<Tmodel _id: 535feab26c757315a4000000, created_at: 2014-04-29 18:13:45 UTC, updated_at: 2014-04-29 18:13:45 UTC, weight: 70.0, height: 170, bmi: 24.221453287197235>
b=Tmodel.new(重量:70,高度:170)
=> #
b、 拯救
B
=> #
正如我所说,这两种方法都有效,但我不确定哪一种是正确的
我使用的是mongoid 4.0beta和rails 4.0.4。您可以使用第二种方法,因为每次身高和体重发生变化时,它都会在保存之前更新值。如果您只想在创建文档时计算bmi,您可以使用第一种方法,也可以在创建之前使用回调。事实上这是一个很好的观点。代码看起来仍然很笨拙,这是正确的方法吗?还是我看错了什么?谢谢,这解决了我的问题。不管怎样,我搜索了很多来找到如何实现这一点,所以它让我想:1)我很笨,很明显它甚至不值得一篇博文,或者2)我做错了什么(不知何故)。你知道这在将来会有什么缺点吗?不,这没有缺点,直到这些在保存之前的回调被弃用,这不会发生,因为它被广泛使用。。。
before_save :calc_bmi
field :weight, type: Integer
field :height, type: Integer
field :bmi, type: Float
def calc_bmi
self.bmi = self.weight / ((self.height.to_f/100) ** 2)
end
b = Tmodel.new(weight: 70, height: 170)
=> #<Tmodel _id: 535feab26c757315a4000000, created_at: nil, updated_at: nil, weight: 70.0, height: 170, bmi: nil>
b.save
b
=> #<Tmodel _id: 535feab26c757315a4000000, created_at: 2014-04-29 18:13:45 UTC, updated_at: 2014-04-29 18:13:45 UTC, weight: 70.0, height: 170, bmi: 24.221453287197235>