在这种情况下,您最好的选择可能是使用表单对象。表单对象仅用于抽象出控制器中发生的复杂交互。这样可以获得更清晰,更易维护的代码,以及其他巨大的好处。您可以阅读更多内容并找到一些优秀的技术示例 http://pivotallabs.com/form-backing-objects-for-fun-and-profit/ 和 http://railscasts.com/episodes/416-form-objects (专业),或只是搜索“rails form objects”。
取决于 - 如果你必须在控制器中处理这些数据,也许这是正确的方法。但与大多数事情一样,如果您向我们展示代码,我们可能会重构。你需要注意 模块化 ,这意味着你应该尽可能地分割你的代码,以鼓励重用
担心的是提供跨控制器/跨模型模块化。例如,我们使用 friendly_id 在几个模型;我们已经分成了不同的关注点,让我们有能力改变一次又一次的关注。更新所有模型
您正在寻找 类方法
的 胖模型瘦身控制器 强>
虽然没有详细记录,但其中一个核心Rails模式是让您的控制器尽可能精简。去做这个, dhh 建议将大量方法放入模型中(范围,类方法等) - 允许您简洁地调用它们
dhh
这是一种通用的编程模式
的 继承的资源 强>
我最喜欢的一个 - 这会在你的控制器中创建标准的RESTful动作界面,所以你不需要自己包含它:
#app/controllers/posts_controller.rb class PostsController < InheritedResources::Base end
这将加载 index , show , new , create , edit , update , destroy 自动
index
show
new
create
edit
update
destroy
的 回调 强>
最后,你应该知道回调
这些允许您使用单个实例方法运行公共代码。一个很好的例子是 find :
find
#app/controllers/posts_controller.rb class PostsController < ApplicationController before_action :load_post, only: [:show, :edit] private def load_post @post = Post.find params[:id] end end