78

我有某些(或所有)控制器需要的 Ruby 方法。我试着把它们放进去/app/helpers/application_helper.rb。我已经将它用于视图中使用的方法。但是控制器看不到这些方法。我应该把它们放在另一个地方还是我需要以不同的方式访问这些辅助方法?

使用最新的稳定 Rails。

4

6 回答 6

78

你应该在里面定义方法ApplicationController

于 2012-11-28T19:54:38.653 回答
73

从 Rails 4 开始,关注点是要走的路。有一篇不错的文章仍然可以通过 Wayback Machine查看。

本质上,如果您查看控制器文件夹,您应该会看到关注子文件夹。沿着这些线在那里创建一个模块

module EventsHelper
  def do_something
  end
end

然后,在控制器中只包含它

class BadgeController < ApplicationController
  include EventsHelper

  ...
end
于 2014-10-09T13:03:28.867 回答
30

您应该在应用程序控制器中定义方法,如果您的方法很少,那么您可以执行以下操作

class ApplicationController < ActionController::Base    
  helper_method :first_method
  helper_method :second_method

  def first_method
    ... #your code
  end

  def second_method
    ... #your code
  end
end

您还可以包括以下帮助文件

class YourController < ApplicationController
  include OneHelper
  include TwoHelper
end
于 2012-11-28T20:02:15.673 回答
20

您可以使用从控制器调用任何辅助方法view_context,例如

view_context.my_helper_method
于 2012-11-28T20:00:06.037 回答
8

Ryan Bigg 的反应很好。

其他可能的解决方案是向您的控制器添加助手:

class YourController < ApplicationController
  include OneHelper
  include TwoHelper
 end

最好的祝福!

于 2012-11-28T19:59:11.870 回答
1

在控制器中包含助手最终会将助手方法公开为操作!

# With new rails (>= 5) 

helpers.my_helper_method


# For console

helper.my_helper_method
于 2020-01-08T05:08:05.097 回答