2

我有一个包含 1000 多行代码的控制器。

不是我正在为这个控制器做代码审查。我根据模块安排我的方法。现在我意识到我的控制器不容易维护,所以我想像下面这样

class UsersController < ApplicationController  
  #Code to require files here 
  #before filter code will goes here 

  #############Here i want to call that partial like things. following is just pseudo #########
    history module
    account module
    calendar module
    shipment module
    payment module
 ####################################################################

end #end of class

这对维护代码很有帮助,因为当我更改历史模块时,我确信我的帐户模块没有改变。我知道 CVS,但我更喜欢每个模块的 50 个副本,而不是我的 users_controller.rb 本身的 200 个副本。

PS :- 我想要肯定的回答。请不要回答,你应该为不同的模块使用不同的控制器.....bla...bla...bla...因为我不可能这样做.

编辑:- 我的版本是

rails -v
  Rails 2.3.4
ruby -v
  ruby 1.8.6 (2008-08-11 patchlevel 287) [i386-linux]
4

3 回答 3

5

这应该适合你:

app/controllers/some_controller.rb

class SomeController < ApplicationController
  include MyCustomMethods
end

lib/my_custom_methods.rb

module MyCustomMethods
  def custom
    render :text => "Rendered from a method included from a module!"
  end
end

config/routes.rb

# For rails 3:
match '/cool' => "some#custom"

# For rails 2:
map.cool 'cool', :controller => "some", :action => "custom"

启动您的应用程序并点击http://localhost:3000/cool,您将从模块中获取自定义方法。

于 2010-07-17T10:04:07.080 回答
1

假设您的伪代码指的是 Ruby 模块,而不是其他东西,只需将所有需求/模块放在一个单独的模块中并包含它,或者如果您正在重用这些文件,则让您的 UsersController 从基类继承。在第一种情况下,您可以将模块视为混入,它专为您想要的模块化而设计。

module AllMyStuff
  include History
  include Account
  ...
end

class UsersController < ApplicationController
  include AllMyStuff

  def new
  end
  ...
end

或者您可以从基本控制器继承,在这种情况下,它可能是一个合理的解决方案。

def BaseController < ActionController
  include history
  include account
end

def UsersController < BaseController
  # modules available to this controller by inheritance
  def new
  end
  ...
end
于 2010-07-17T10:25:15.250 回答
0

我尝试了以下方法并运行它,也许它适合你:

应用程序/user_controller.rb

require 'index.rb'
class UsersController < ApplicationController  
  # some other code
end

应用程序/index.rb

class UsersController < ApplicationController

def index
  @users = User.all
end

end

我的环境:rails 3 beta4

于 2010-07-17T08:37:41.287 回答