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中寻找助手,但名字并不重要 。
重要的是:
- 文件名必须以“_helper.rb”结尾
- 模块名称必须是文件名称的骆驼大小写
- 该文件必须位于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.4和0.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