实际上我正在尝试对项目执行乘法。我有2个模型:父模型和子模型。我想通过调用父模型在父视图中显示对子模型执行的乘法结果乘法方法。这是代码:
app / models / drink.rb又名儿童模型
class Drink < ActiveRecord::Base
belongs_to :menu
before_create :total_amount
before_save :total_amount
def total_amount
self.quantity * self.price * 1.30
end
end
&GT;在app / models / menu.rb中称为父模型
class Menu < ActiveRecord::Base
has_many :drinks, :dependent => :destroy
accepts_nested_attributes_for :drinks, :allow_destroy => true
end
在views / menu / show.html.erb 中
和错误消息: 未定义的方法`total_amount'为nil:NilClass 显然,total_amount是模特饮料的一个属性。我做错了什么。谢谢你的帮助。<td><%=number_to_currency(@menu.total_amount) %> </td>
答案 0 :(得分:2)
显然,total_amount是模型饮料的一个属性。
是的,该方法是在饮料模型中(顺便说一句,如果它是一个属性,那么它在您的迁移中被声明。您设置的方式total_amount将不会保存在数据库中),但是,你是在菜单实例上调用它。
正如Misha M所说,@ menu.drinks.total_amount。
答案 1 :(得分:1)
您需要在Menu类中添加一个名为total_amount
的函数,然后让它遍历所有饮品,并总计每种饮品的总量。
答案 2 :(得分:1)
事实上问题是饮料的数量和价格没有设定。解决方案的一部分来自Wizard of Ogz。通过尝试解决“nil”无法强制进入BigDecimal的事实“我也得到了这个问题的解决方案。所以这就是解决方案
1-app / models / drink.rb aka child model 应用于self.quantity和self.price将方法转换为字符串(to_s)然后转换为大小数(to_d)
class Drink < ActiveRecord::Base
belongs_to :menu
before_save :total_amount
def total_amount
self.quantity.to_s.to_d * self.price.to_s.to_d * 1.30
end
end
2-app / models / drink.rb又名儿童模型 在将数据保存到数据库之前验证价格和数量的存在
class Drink < ActiveRecord::Base
belongs_to :menu
before_save :total_amount
validates :price, :presence => true
validates :quantity, :presence => true
def total_amount
self.quantity.to_s.to_d * self.price.to_s.to_d * 1.30
end
end
3-app / views / menus / show.html.erb又名父模型
只需将方法total_amount应用于dink aka child(嵌套)模型,如下所示:
<td><%=number_to_currency(drink.total_amount) %> </td>