如果子数据不存在,如何获取父数据

kq0g1dla  于 2021-09-29  发布在  Java
关注(0)|答案(1)|浏览(237)

我试图获取子数据(如果它存在),但当它为零时,它将获取父数据。
我不想在视图中硬编码,因为这需要以下内容:

if @product.parent
  @product.price ? @product.price : @product.parent.price
end

因此,我认为最好在产品模型中添加一些内容来覆盖特定属性,如:


# app/models/product.rb

def price
  if self.parent
    self.price ? self.price : self.parent.price
  end
end

但是上面的方法是多余的,因为我必须对模型的每个属性都这样做,这将是很多函数。
有没有办法使一个函数能够实现与所有属性相同的功能?
我希望能够从父级获取任何属性,如果它不能从子级获取
谢谢

a2mppw5e

a2mppw5e1#

您可以创建一个函数,首先在对象中查找属性,如果不存在,则在关联的父对象中查找属性

def get_attribute(attr)
    self.send(attr).present? ? self.send(attr) : self.parent.send(attr)
  end

然后在对象中,可以使用

obj = Model.find(id)
obj.get_attribute(:attr_name)

相关问题