忏悔:我只对我的方法使用私有和公开可见性!
我觉得这是件坏事。但是在Rails中它似乎并不是一个问题。
有没有人在Rails中有一个例子,如果不使用受保护的可见性,那将是一个很大的错误?
答案 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和其他实现我在这里使用的功能向你展示的情况,但我有一个更复杂的景观,我已经简化了这里以达到你的观点。