Ruby中的方法可见性(public、protected和private方法)已经在this blog post个地方得到了很好的解释.但在RubyonRails中,由于框架的设置方式,它似乎与常规Ruby应用程序略有不同.那么,在Rails模型、控制器、助手、测试等中,什么时候使用受保护或私有方法是合适的?

Edit:谢谢你的回答.我理解Ruby中受保护和私有的概念,但我想更多地了解在Rails应用程序的各个部分(模型、控制器、助手、测试)的上下文中使用这些类型的可见性的典型方式.例如,公共控制器方法是动作方法,应用程序控制器中的受保护方法用于需要多个控制器访问的"助手方法",等等.

推荐答案

对于模型,其思想是公共方法是类的公共接口.公共方法将被其他对象使用,而受保护/私有方法将对外部隐藏.

这与其他面向对象语言中的做法相同.

对于控制器和测试,请随意操作控制器和测试类都只由框架实例化和调用(是的,我知道理论上可以从视图中获取控制器,但如果这样做,无论如何都会有奇怪的事情).因为没有人会直接创造这些东西,所以没有什么可以"保护"的.

Addendum/Correction:对于控制器,您应该将"helper"方法标记为protectedprivate,并且只有操作本身应该是公共的.该框架永远不会将任何传入的HTTP调用路由到非公共的操作/方法,因此应该以这种方式保护您的助手方法.

对于助手来说,方法是受保护的还是私有的都没有区别,因为它们总是被"直接"调用.

当然,如果能让你更容易理解的话,你可以在所有这些情况下标记受保护的东西.

Ruby-on-rails相关问答推荐

如何修改使用Google Cloud App Engine部署rails 7应用程序的步骤

确定当前太平洋时区是PST还是PDT

我使用rbenv安装Ruby,但我在使用";gem";->;错误:执行gem时遇到此错误.(Errno::EACCES)权限被拒绝

我如何在不在 gemfile 中的 rake 任务中要求 gem?

Rails 7 共享刺激控制器功能

如何保持 en.yml DRY?

Gem::Ext::BuildError:ERROR:无法在macOS Monterey上构建Gem本机扩展

Restful Rails 编辑与更新

带有 simple_form 的按钮内的 HTML 代码

如何从 Ruby on Rails 应用程序返回正确的 HTTP 错误代码

从 Authlogic 迁移到 Devise

为什么使用 HTTP PUT 和 DELETE 方法而不是 POST?

Rails 4网站图标问题

Rails 成语避免在 has_many 中重复:通过

Ruby on Rails 基本概念总结

如何为rails中的number_field添加默认值?

Rails Rake 任务 - 访问模型类

如何使用 Rspec 判断 ActiveJob 中排队的内容

设计:在注册期间禁用密码确认

Rails:为什么 with_exclusive_scope 受保护?关于如何使用它的任何好的做法?