2011-09-06 80 views
2

我正在使用回形针来定义附件称为徽章,无论是在子模型和通过belongs_to定义的父模型。我想重写@ instance.badge,使其返回模型的徽章(如果可用),否则返回父徽章。我如何返回父母的附件,如果孩子的零与回形针

我开始执行以下操作,直到我意识到read_attribute始终返回nil并使用父徽章。有没有办法读取徽章方法的结果,如果返回零,请使用父徽章方法?

我宁愿保留名为badge的方法,而不是有一个单独的child_or_parent_badge方法。

def badge 
    read_attribute(:badge) || parent.badge 
end 

回答

3

命名方法徽章会让你的生活变得更加复杂,更有意义的名字为它做什么的助手,并留下附件名称相同的,所以您可以直接访问它。

class Parent < ActiveRecord::Base 
    has_many :childs 
    has_attached_file :badge 
end 

class Child < ActiveRecord::Base 
    belongs_to :parent 
    has_attached_file :badge 

    def resolve_badge 
    badge || parent.badge 
    end 
end 
+0

是的,可能是最好的方法。只是确保没有不同的方式,但我会做到这一点。谢谢。 –