【问题标题】:Helper methods to be used in Controllers AND Views in Rails在 Rails 的控制器和视图中使用的辅助方法
【发布时间】:2013-09-12 22:05:09
【问题描述】:

我知道我可以在 Rails 的 helper 文件夹内的 Helper 类中放置一个辅助方法。然后可以在任何视图中使用该方法。而且我知道我可以将方法放在ApplicationController 类中,并且该方法可以在任何控制器中使用。

在哪里放置控制器和视图中经常使用的方法?

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-3 ruby-on-rails-3.2 ruby-on-rails-4 helpermethods


    【解决方案1】:

    您可以将方法放入控制器中,然后在控制器中调用helper_method 以指示此方法可用,就好像它也在帮助器中一样。

    例如:

    class ApplicationController
    
      helper_method :this_is_really_useful
    
      def this_is_really_useful
        # Do useful stuff
      end
    

    然后,此方法将可用于所有控制器和所有视图。

    【讨论】:

      【解决方案2】:

      你可以把它放在控制器中调用:

      helper_method :my_method
      

      来自控制器。

      【讨论】:

        【解决方案3】:

        我将您描述的助手放在我的lib/ 目录中的模块中。给定一些MyApp 应用程序,这将进入app/lib/my_app/helpers.rb 并看起来像

        module MyApp
          module Helpers
            extend self
        
            def some_method
              # ...
            end 
        
          end
        end
        

        接下来,您必须需要此模块。在config/initializers/my_app.rb 创建一个新的初始化器,看起来像

        require 'my_app'
        

        并确保config.autoload_pathsconfig/application.rb 中包含您的lib/ 目录。

        config.autoload_paths += Dir["#{config.root}/lib",
                                     # other paths here...
                                    ]
        

        最后,将模块包含在您想要使用的任何位置。 任何地方

        app/controllers/application_controller.rb

        class ApplicationController < ActionController::Base
        
          include MyApp::Helpers
        

        app/helpers/application_helper.rb

        module ApplicationHelper
          include MyApp::Helpers
        

        我认为这是一种在整个应用程序中管理可重用助手的更清洁、更可测试的方法。

        【讨论】:

          猜你喜欢
          • 2011-02-19
          • 2010-09-14
          • 1970-01-01
          • 2012-02-13
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多