Rails 3.如何添加ActiveAdmin将使用的帮助程序?

leo*_*nel 61 ruby ruby-on-rails helpers activeadmin

我正在创建一个由Formtastic使用的帮助器,但是我得到了undefined local variable or method错误.我不知道在哪里放它所以它可以工作.

我已经尝试过application_helper.rb和app/helpers/active_admin/view_helpers.rb

Bis*_*lli 70

您可以在尝试时在app/helpers /中定义它们,但是您需要通过活动管理员的初始化程序包含它们,如下所示:

# in config/initializers/active_admin.rb
ActiveAdmin.setup do |config|
    ....
end

module ActiveAdmin::ViewHelpers
  include ApplicationHelper
end
Run Code Online (Sandbox Code Playgroud)


alo*_*ony 60

您需要将助手函数放在app/helpers/active_admin/views_helper.rb文件示例中:

module ActiveAdmin::ViewsHelper #camelized file name
  def my_helper 
       # do something 
  end 
end 
Run Code Online (Sandbox Code Playgroud)

  • 还有一个提示:在0.5.0中你应该重新启动整个堆栈以使其工作. (24认同)
  • @DmitryPolushkin,1.0.0.pre.我最终做了bishma-stornelli建议的事情.至少它不依赖于AA开发人员无法抗拒定期改变的一些空灵惯例. (3认同)

Mar*_*yne 24

我使用ActiveAdmin 0.6.1发现的是,ActiveAdmin将在app/helpers/active_admin/*_ helper.rb中查找帮助程序,但名称并不重要.

重要的是:

  1. 文件名必须以"_helper.rb"结尾
  2. 模块名称必须是文件名的驼峰大小写
  3. 该文件必须位于app/helpers/active_admin /目录中.

如果有人知道这是正式记录在哪里,那将是非常棒的.

这是一个例子:https://gist.github.com/afred/7035a657e8ec5ec08d3b


okl*_*liv 12

app/helpers/active_admin/view_helpers.rb
Run Code Online (Sandbox Code Playgroud)

没帮我

编辑:我相应地将它更改为views_helper.rb和ViewsHelper并且它有效

*但如果您只想为某些资源定义它,您可以按我的方式进行


我不得不定义

#app/helpers/active_admin/categories_helper.rb

module ActiveAdmin::CategoriesHelper

  def helper_method

  end

end
Run Code Online (Sandbox Code Playgroud)

对于我的active_admin资源app/admin/categories.rb


Anh*_*yen 6

我可以在ActiveAdmin 0.6.1中工作(最后!).解决方案是创建一个辅助模块,如下所示:

# app/helpers/active_admin_helpers.rb
module ActiveAdminHelpers
  # make this method public (compulsory)
  def self.included(dsl)
    # nothing ...
  end

  # define helper methods here ...
  def helper_method
    ...
  end
end
Run Code Online (Sandbox Code Playgroud)

然后以这种方式包含这个模块:

# app/admin/[resource].rb
include ActiveAdminHelpers

ActiveAdmin.register [Resource] do
  ...

end
Run Code Online (Sandbox Code Playgroud)

实际上,这不是一个很好的解决方案,但它干涸并且运作良好.我已经阅读并尝试了很多方法和解决方案,例如ViewHelpers模块(置于'app/helpers'或'app/admin/active_admin'),ActiveAdmin :: DSL Monkey补丁,......但是那些从未在版本中工作的0.6.1(我对其他版本没有任何想法):(

  • 事实上这是一个糟糕的主意。将助手包含在全局范围内将以意想不到且无法追踪的方式造成严重破坏......我现在正在遭受痛苦......:( (4认同)
  • 这个解决方案在技术上有效,但这不是一个好主意.你实际上在顶级的`Object`中加入了'ActiveAdminHelpers`.这意味着一旦加载了这个文件,那些辅助方法就可用于*整个应用程序中的每个对象*. (3认同)

Del*_*Del 5

另一种方法是让特定的 ActiveAdmin 控制器在后台生成包含帮助程序。此方法将允许在每个文件中明确包含帮助程序而不是全局。

ActiveAdmin.register MyModel do
  controller do
    include MyHelper
  end
end
Run Code Online (Sandbox Code Playgroud)