0

在我的 Rails 模型中,我有一个description方法:

def description
  if self.channels.nil?
    return self.allowed_ip_addresses
  else
    return self.channels.to_s + ' channels - ' + self.allowed_ip_addresses
  end
end

我有很多模型,我在其中创建了一个description方法,该方法根据该模型的其他属性返回一些有用的信息。

我刚刚意识到的问题是,这个模型特别是description在它的表中有一个列,所以我只是想知道解决这个问题的最佳方法,我环顾四周,但没有发现任何有用的东西。

我想到的第一件事就是在调用时传递一个参数description,例如

def description(table_value = 0)
  if table_value
    return self.description
  end

  if self.channels.nil?
    return self.allowed_ip_addresses
  else
    return self.channels.to_s + ' channels - ' + self.allowed_ip_addresses
  end
end

但很快意识到这是没有意义的,因为它只会description递归地调用该方法并死掉(假设 a1与调用一起传递给description)。

我也可以更改表列名称,但它在其他地方使用,所以我只是想看看是否有替代解决方案。

4

2 回答 2

2

我肯定会重命名您的自定义description方法。

于 2013-10-28T12:09:14.707 回答
0

Ruby 有“super”的概念,它允许你调用父类或模块中的方法。在 Rails 中,Active Record 允许您通过覆盖“列方法”来利用这一点,并且仍然可以通过调用 super 获取数据库值。您的问题并不清楚您要在什么条件下使用数据库值以及何时要使用自定义逻辑。这里有一些伪代码可以帮助您入门:

def description
  return super if Use Database Value?

  if self.channels.nil?
    return self.allowed_ip_addresses
  else
    return self.channels.to_s + ' channels - ' + self.allowed_ip_addresses
  end
end
于 2013-10-28T12:09:39.887 回答