在我正在创建的 Rails 应用程序中,我的控制器中有一些代码,我想知道它是否在正确的位置。该代码相当微不足道,它将 id 存储在一个数组中以显示“最近查看”的页面。大概3行代码,但我在想未来,如果这个功能扩展呢?我不希望我的控制器臃肿。
我可以制作一个模块,但在这种情况下,我应该将文件存储在哪里?控制器是进行会话管理的正确位置吗?对我的代码组织有什么建议吗?
谢谢
在我正在创建的 Rails 应用程序中,我的控制器中有一些代码,我想知道它是否在正确的位置。该代码相当微不足道,它将 id 存储在一个数组中以显示“最近查看”的页面。大概3行代码,但我在想未来,如果这个功能扩展呢?我不希望我的控制器臃肿。
我可以制作一个模块,但在这种情况下,我应该将文件存储在哪里?控制器是进行会话管理的正确位置吗?对我的代码组织有什么建议吗?
谢谢
如果它特定于控制器,请将其保存在控制器中。
如果它适用于所有控制器,则进入 ApplicationController。
如果它被某些控制器共享而不是其他控制器共享,则从继承自 ApplicationController 的控制器继承,或者使用包含/扩展或制作扩展模块 ActiveSupport::Concern
(这是 Rails 内部相当普遍使用的)。
并且最好把所有东西都保存在app/controllers
或者某个子目录、子子目录等。Rails 自动加载依赖于路径来匹配模块命名空间,所以A::B::C
属于app/controllers/a/b/c.rb
. 不要像 Java 等那样深入。只要有你需要的目录/模块的数量来保持它的组织。
注意:虽然控制器在自己的模块中没有那么问题,但根据我的经验,您的模型应该保留在根目录中,例如app/models
,否则您会遇到问题。
如果你能提供帮助,我也会避免在会话中存储太多。而是存储在数据库中(或长寿命 cookie,如果它是特定于浏览器环境的)。例如,如果有人注销并且他们正在查看一条记录,他们可能希望稍后重新登录并拥有一个包含指向该记录的链接的列表。
顺便说一句-您没有问,并且可能已经有了在会话中存储最近访问过的页面的代码,但这里有类似的问题/答案: