我可以命名一个对象属性来模仿方法调用吗?

时间:2013-08-01 00:54:59

标签: ruby-on-rails ruby database

我正在RoR中构建一个新的应用程序,并且过去使用过传统的属性命名约定。然而,在可读性的名义下,我开始考虑使用更具描述性的对象属性。例如,我可以将属性'has_special_needs'命名为if user.special_needs == true ...,而不是if user.has_special_needs ...

虽然这使我的代码更容易阅读,但它看起来与方法调用非常相似,这让我觉得它可能会让人感到困惑和/或我可能会踩过命名约定行。经过大量的研究,我没有找到任何一个选项的坚实论据。由于这也涉及数据库命名约定(我不太了解的一个主题),我希望得到一些建议。

由于

1 个答案:

答案 0 :(得分:2)

如果你需要包装东西,那么创建这种方法是非常可接受的:

class MyModel < ActiveRecord::Base
  ...
  def has_special_needs
    self.special_needs == true
  end
end

您还可以使用问号(?)和刘海(!)来使代码更具可重复性:

def has_special_needs?
  self.special_needs == true
end

但是在这个特定的例子中user.special_needs是对还是对呢?所以你可以使用别名:

class MyModel < ActiveRecord::Base
  alias_attribute :has_special_needs?, :special_needs
  ...
end

# Then:
if @mymodel.has_special_needs?
  ...
end