ruby-Rails 3.如何添加ActiveAdmin将使用的助手?

我正在创建一个供Formtastic使用的助手,但出现undefined local variable or method错误。 我不知道将它放在哪里可以正常工作。

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

leonel asked 2019-10-07T04:27:59Z
10个解决方案
70 votes

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

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

module ActiveAdmin::ViewHelpers
  include ApplicationHelper
end
Bishma Stornelli answered 2019-10-07T04:28:10Z
59 votes

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

module ActiveAdmin::ViewsHelper #camelized file name
  def my_helper 
       # do something 
  end 
end 
alony answered 2019-10-07T04:28:35Z
23 votes

我使用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]

Mars Redwyne answered 2019-10-07T04:29:42Z
12 votes
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资源app / admin / categories.rb

okliv answered 2019-10-07T04:30:32Z
7 votes

我可以使其在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

然后以这种方式包括此模块:

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

ActiveAdmin.register [Resource] do
  ...

end

实际上,这不是一个很好的解决方案,但是它是干的并且运行良好。 我已经阅读并尝试了很多方法和解决方案,例如ViewHelpers模块(放在“ app / helpers”或“ app / admin / active_admin”下),ActiveAdmin :: DSL猴子修补程序,...但是这些方法和解决方案在版本中均无效 0.6.1(我对其他版本没有任何想法):(

Anh Nguyen answered 2019-10-07T04:31:10Z
4 votes

app/admin/active_admin/view_helpers.rbactiveadmin 0.3.40.5.0中定义ActiveAdmin::ViewHelpers在我看来可以使用。

tfischbach answered 2019-10-07T04:31:35Z
4 votes

另一种方法是使幕后生成的特定ActiveAdmin控制器包含帮助程序。 此方法将允许在每个文件中显式包含助手,而不是全局。

ActiveAdmin.register MyModel do
  controller do
    include MyHelper
  end
end
Del answered 2019-10-07T04:32:00Z
3 votes

使用[git://github.com/activeadmin/activeadmin.git]中的activeadmin 1.0.0.pre1

导轨4.2.1

这对我有用...

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

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/views/admin/balance_sheets/_form.html.erb

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 %>
Leantraxxx answered 2019-10-07T04:32:48Z
2 votes

您还可以使用ActiveAdmin局部变量:

app/views/admin/_my_partial.html.arb

app/views/admin/_my_partial.html.arb内部,您的active_admin红宝石代码。

Luc Boissaye answered 2019-10-07T04:33:28Z
1 votes

对于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

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

# 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

显示输入表单的单选按钮。

不知道为什么在form do |f|块之外需要proc{},但是如果有人可以解释为什么这是一个坏主意,我会找到另一种方法。

samsmith answered 2019-10-07T04:34:22Z
translate from https://stackoverflow.com:/questions/8673112/rails-3-how-to-add-a-helper-that-activeadmin-will-use