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