【问题标题】:The best way to “split” up a large Rails controller“拆分”大型 Rails 控制器的最佳方式
【发布时间】:2013-09-15 16:53:35
【问题描述】:

我目前有一个已经很大的控制器,而且越来越大。我想知道缩小控制器的最佳方法是什么。我不一定要寻找最简单的方法,而是一种安全有效的方法。我已经使用 Rails 开发了一段时间,但我仍然不熟悉“子类化”是如何工作的,我什至不确定它是否应该以这种方式使用。我在想也许是这样的?

class SomeController < ApplicationController
end

class MoreFunctionsController < SomeController
end

目前还没有经过测试——我现在仍在努力——但我希望这能让你了解我正在尝试的方向。我也不确定这个路由会是什么样子。 “拆分”大型控制器的最佳方式是什么?

【问题讨论】:

  • 为什么你的控制器很大?公共行为太多还是逻辑太多?
  • 我还会添加查看Fat Model / Skinny Controller。当然,人们通常会走得太远,开始将视图逻辑问题放在模型中,但采用 DRY 方法并将数据逻辑移回模型是个好主意。
  • @delba 好吧,总体而言,它是一个相当大的应用程序。我的控制器实际上已经很“苗条”了,但我只是在寻找一种方法让它们变得更苗条。
  • @creativereason 感谢您提供的信息.. 读得很好

标签: ruby-on-rails


【解决方案1】:

ActiveSupport::Concern (documentation) 就是你要找的。​​p>

更新

类似这样的:

# config/application.rb
config.autoload_paths += %W(#{Rails.root}/app/controllers/concerns) # in Rails4 this is automatic

# app/controllers/my_controller.rb
class  MyController < ApplicationController
  include GeneralStuffConcern

  def index
    render text: foo
  end
end

# app/controllers/concerns/general_stuff_concern.rb
module GeneralStuffConcern
  extend ActiveSupport::Concern

  def show
    redirect_to root_path
  end

protected
  def foo
    'fooo'
  end
end

更新 2

其实我更推荐这个http://blog.codeclimate.com/blog/2012/10/17/7-ways-to-decompose-fat-activerecord-models/

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2010-11-04
  • 2012-08-12
  • 1970-01-01
  • 1970-01-01
  • 2011-03-06
  • 2021-08-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多