我有这些表格:
STOCKDIARY
- ID, DATE, PRODUCT, UNITS, PRICE
PRODUCTS
- ID, NAME, CONSIGNOR
CONSIGNORS
- ID, NAME, COMMISSION
我已经设置了所有关联。因此,如果在我看来我使用:
stockdiary.product.consignor.try(:COMMISSION)
我在每个产品线上获得了正确的佣金。
请注意,我使用try
,因为并非所有产品都有发货人。
但现在我需要展示stockdiary.PRICE * stockdiary.product.consignor.COMMISSION
所以在Stockdiary模型中我设置了
def total_commission
(self.PRICE * self.product.consignor.COMMISSION)
end
但是这给了我一个错误:
undefined method 'COMMISSION' for nil:NilClass
我认为问题来自于某些产品在CONSIGNOR列中具有空值。只是为了确保我为表CONSIGNORS列COMMISSION上的每一行输入了一个值。但错误仍然存在。
我希望饲养员在没有发货人的情况下排成一行,将0作为佣金。
如何解决?
答案 0 :(得分:2)
<强>方法一:强>
将试用列添加到consignor
而不是COMMISSION
或两者都给予。
def total_commission
(self.PRICE * self.try(:product).try(:consignor).try(:COMMISSION))
end
<强>方法2:强>
你也可以使用,
def total_commission
consignor = self.product.consignor.present? ? self.product.consignor.COMMISSION : 0
(self.PRICE * consignor)
end
它的作用是,如果有发货人,如果你提到的话它会接受它。
答案 1 :(得分:2)
如前所述:
请注意,我使用
Clock clock = new Clock(); clock.CurrentTime += Clock_CurrentTime; clock.Start(); private static void Clock_CurrentTime(object sender, TimeEventArgs e) { Console.WriteLine(e.Time.ToShortTimeString()); }
,因为并非所有产品都有发货人。
所以你需要:
try
答案 2 :(得分:2)
def total_commission
commission = product.consignor.try(:COMMISSION)
commission ? (PRICE * commission) : 0
end