Rails 3.如何添加一个ActiveAdmin将使用的帮助器?

我创build一个由Formtastic使用的帮手,但我得到undefined local variable or method错误。 我不知道把它放在哪里,所以它可以工作。

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

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

 # in config/initializers/active_admin.rb ActiveAdmin.setup do |config| .... end module ActiveAdmin::ViewHelpers include ApplicationHelper end 

你需要把你的帮助函数放在app/helpers/active_admin/views_helper.rb文件中例如:

 module ActiveAdmin::ViewsHelper #camelized file name def my_helper # do something end end 

我发现使用ActiveAdmin 0.6.1的是,ActiveAdmin会在app / helpers / active_admin / * _ helper.rb中寻找助手,但名字并不重要

重要的是:

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

如果有人知道这是正式logging,这将是非常棒的。

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

 app/helpers/active_admin/view_helpers.rb 

没有帮助我

编辑:我相应地改变了views_helper.rb&ViewsHelper,它的工作

*但是如果你想只为某些资源定义它,你可以按照我的方式来完成


我必须定义

 #app/helpers/active_admin/categories_helper.rb module ActiveAdmin::CategoriesHelper def helper_method end end 

为我的active_admin资源应用程序/pipe理/ categories.rb

我可以使它在ActiveAdmin 0.6.1(最后!)中工作。 解决scheme是创build一个辅助模块,如下所示:

 # 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 

那么这样包含这个模块:

 # app/admin/[resource].rb include ActiveAdminHelpers ActiveAdmin.register [Resource] do ... end 

事实上,这不是一个好的解决scheme,但它干燥,工作良好。 我已经阅读并尝试了很多方法和解决scheme,如ViewHelpers模块(放在'app / helpers'或'app / admin / active_admin'),ActiveAdmin :: DSL猴子修补程序,但是那些从来没有在版本0.6.1(我对其他版本没有任何想法):(

app/admin/active_admin/view_helpers.rb定义ActiveAdmin::ViewHelpers适用于activeadmin 0.3.40.5.0

从git://github.com/activeadmin/activeadmin.git使用activeadmin 1.0.0.pre1

Rails 4.2.1

这对我工作…

my_app/app/helpers/active_admin/resources_helper.rb

 module ActiveAdmin module ResourcesHelper def resource_form_for(_resource, _params, _options = {}, &_block) url = if _resource.new_record? UrlBuilder.resources_path(_resource.class, _params) else UrlBuilder.resource_path(_resource.class, _params) end method = _resource.new_record? ? :post : :put options = { url: url, method: method, builder: ActiveAdmin::FormBuilder } options.merge!(_options) semantic_form_for([:admin, _resource], options) do |f| _block.call(f) end end end end 

my_app/app/admin/balance_sheets.rb

 ActiveAdmin.register BalanceSheet do form partial: 'form' end 

my_app/app/views/admin/balance_sheets/_form.html.erb

 <%= resource_form_for(resource, params) do |f| %> <%= f.inputs "Fields" do %> <%= f.input :progress_status %> <%= f.input :crew %> <%= f.input :shift %> <%= f.input :expected_progress %> <%= f.input :real_progress %> <%= f.input :analyst, collection: User.analysts %> <%= f.input :activity_ids, as: :check_boxes, collection: Activity.balance_sheet_activities %> <%= f.input :worker_ids, as: :check_boxes, collection: Worker.all %> <% end %> <%= f.actions %> <% end %> 

你也可以使用ActiveAdmin的部分:

render partial: 'admin/my_partial', locals: { var: my_var }

而在app/views/admin/_my_partial.html.arb你的active_admin ruby​​代码。

Rails 3.2.11和gem activeadmin(0.5.1)的工作原理是不添加app / active_admin / view_helpers.rb文件,或者在config / initializers / active_admin.rb中声明任何模块

我通过模型将我的帮手逻辑地放到app / * _ helpers.rb文件中。 然后在我使用的app / admin / model.rb文件里面:

 # app/admin/[resource].rb ActiveAdmin.register [Resource] do ... filter :gender, as: :select, collection: proc{genders} ... end 

要在filter中使用帮助程序,请在列表视图中显示要过滤的性别下拉列表。 对于相应的创build表单字段,我使用了:

 # app/admin/[resource].rb ActiveAdmin.register [Resource] do form do |f| f.inputs "Case Manager" do ... f.input :gender, as: :radio, collection: genders ... f.buttons end end end 

显示input表单的单选button。

不知道为什么proc{}form do |f|以外是必需的 块,但如果有人能解释为什么这是一个坏主意,我会find一个不同的方式。

另一种做法是让特定的ActiveAdmin控制器在幕后生成包括助手。 这个方法可以让每个文件显式的包含helper,而不是全局的。

 ActiveAdmin.register MyModel do controller do include MyHelper end end