您是否曾在Rails中使用受保护的可见性?

时间:2009-05-22 06:11:45

标签: ruby-on-rails private public protected

忏悔:我只对我的方法使用私有公开可见性!

我觉得这是件坏事。但是在Rails中它似乎并不是一个问题。

有没有人在Rails中有一个例子,如果不使用受保护的可见性,那将是一个很大的错误?

2 个答案:

答案 0 :(得分:9)

更新 - 请参阅下面与true explanation of protected/private in Ruby相关联的评论。事实上,这是我在Java时代遗留下来的一种根深蒂固的偏见。我的答案中唯一重要的部分是非操作的控制器方法不应该是public(或者至少你的路线应该保护它们)。

单表继承是protected在模型层中有用的一个很好的例子,因为它是继承最常见的用途之一。

在控制器层中,ApplicationController上定义的辅助方法应标记为protected - 如果它们是private,则其他控制器将无法访问它们,但如果它们是public Rails会将它们视为行动。

就我个人而言,我发现我使用类继承比我的许多朋友和同事更多,甚至在Rails应用程序中也是如此。因为我经常使用它(并且从我的Java时代开始),我赞成protected所有帮助方法为任何想要扩展课程的人(通常是我自己)提供自由 - 除非我真的很尴尬约一,然后我标记private。 :)

答案 1 :(得分:0)

我有SingleTableInheritance

class Person< AR ::基地 班老师<人 calss学生<人

我使用受保护的方法来实现学生和教师常用的私有方法:

class Person < AR::base
  def self.find(*args)
    reject_leaves(super(*args))
  end
protected
  def self.reject_leaves(target) #like a private in Teacher and Student
    case target
      when Array target.select{|t| reject_leaves(t)}
      when Person (target.leave_date < Date.today ? target : nil)
      else target
    end
  end
end

免责声明:有一些插件,比如act-as-paranoid和其他实现我在这里使用的功能向你展示的情况,但我有一个更复杂的景观,我已经简化了这里以达到你的观点。

相关问题