在哪里将Ruby helper方法用于Rails控制器?


75

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

使用最新的稳定Rai​​ls。

Answers:



67

对于Rails 4及更高版本,要解决的问题是解决之道。有一篇不错的文章,仍然可以通过Wayback Machine进行查看

本质上,如果您在controllers文件夹中查找,您应该会看到一个关注子文件夹。沿这些行在其中创建一个模块

module EventsHelper
  def do_something
  end
end

然后,将其包含在控制器中

class BadgeController < ApplicationController
  include EventsHelper

  ...
end

2
当您不需要所有控制器中都包含的辅助方法时,我会发现这是最好的解决方案。此解决方案也适用于模型。
丹尼斯

真好 谢谢您:)
tonyedwardspz '16

您知道我们是否需要使用extend ActiveSupport::Concern控制器问题吗?
Marklar '17

无需在controller / concerns目录内扩展ActiveSupport :: Concern。您只需要在目录上方定义模块,并且可以简单地进行上述包含(对于rails 4.2和rails 5)。
Ravindra M

可能是最好的答案
Anton Semenichenko

29

您应该在应用程序控制器内定义方法,如果方法很少,则可以按照以下步骤操作

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

有没有一种方法可以在一行上分配所有helper_method?
Harsha MV

@HarshaMV我想你可以像一样继续前进helper_method :first_method, :second_method
富兰克林于

19

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

view_context.my_helper_method

8

Ryan Bigg的回应很好。

其他可能的解决方案是将辅助程序添加到您的控制器:

class YourController < ApplicationController
  include OneHelper
  include TwoHelper
 end

最好的祝福!


0

在控制器中包含助手将最终使助手方法暴露为动作!

# With new rails (>= 5) 

helpers.my_helper_method


# For console

helper.my_helper_method
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.