0

我有一个图片类,我想根据某些逻辑覆盖返回“描述”数据库列值。

这在 Rails 中有效吗?在返回数据库列值之前,我可以一直依赖类调用类方法吗?

# database columns for Picture class
# description => String
# parent_id => Integer

class Picture < ActiveRecord::Base

  def description
    if parent_id.nil?
      self.description      
    else
      description = Picture.find(parent_id).description
    end
  end

end 

无法弄清楚在 Rails 源代码中的哪里可以找到答案,因此我们将不胜感激。

谢谢!

编辑

我正在尝试返回图片的描述,具体取决于它是子图片还是父图片(它们可以嵌套)。这个例子有点做作......我可以通过使用与数据库列没有相同名称的方法来轻松避免这种情况......例如

def my_description
   if parent_id.nil? # return db data since no parent
      self.description
   else # return parent's description if one exists
      description = Picture.find(parent_id).description
   end
end

我想我在这里试图变得不必要的复杂

4

2 回答 2

2

目前尚不清楚您要做什么,但您可以使用 super 从方法中获取描述值:

def description
  if parent_id.nil?
    super
  else
    self.description = Picture.find(parent_id).description
  end
end

请注意,我将最后一行更改为使用self.description =,因为我假设您要设置描述值。如果不是这种情况,那么您不需要将其分配给任何变量。

于 2012-07-27T04:53:02.463 回答
1

您应该在您的描述方法中使用 read_attribute(:description) (可以覆盖)。

此外,您可以在 else 部分执行 parent.description 而不是 Picture.find rigmarole。使用我相信你有的家长协会。

def description
  # if parent_id is there and the parent object can be found and that parent has a description
  if (parent_id? && parent && parent.description?)
    # show parental description
    parent.description
  else
    # read my own database attribute
    read_attribute(:description)
  end
end

不确定分配给上面的描述是否会做任何事情,因为它最终会成为一个局部变量。在读者中做 self.description= 只是有点讨厌恕我直言。

于 2012-07-27T05:49:04.533 回答