Rails 3. Как добавить помощника, который будет использовать ActiveAdmin? - PullRequest
61 голосов
/ 30 декабря 2011

Я создаю помощника, который будет использоваться Formtastic, но я получаю ошибку undefined local variable or method. Я не знаю, где его поставить, чтобы он мог работать.

Я уже пробовал в application_helper.rb и app / helpers / active_admin / view_helpers.rb

Ответы [ 10 ]

70 голосов
/ 30 октября 2012

Вы можете определить их в приложении / помощниках /, как вы пытались, но вам нужно включить их через инициализатор активного администратора следующим образом:

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

module ActiveAdmin::ViewHelpers
  include ApplicationHelper
end
60 голосов
/ 06 февраля 2012

Вам нужно поместить вспомогательные функции в файл app/helpers/active_admin/views_helper.rb Пример:

module ActiveAdmin::ViewsHelper #camelized file name
  def my_helper 
       # do something 
  end 
end 
23 голосов
/ 21 декабря 2013

С помощью 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

12 голосов
/ 08 мая 2012
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

6 голосов
/ 21 ноября 2013

Я могу заставить его работать в 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 (у меня нет никаких идей о других версиях): (

4 голосов
/ 06 февраля 2017

Другой способ сделать это состоит в том, чтобы специальный контроллер ActiveAdmin, сгенерированный за кадром, включал помощника.Этот метод позволит сделать включение помощников явным для каждого файла, а не глобальным.

ActiveAdmin.register MyModel do
  controller do
    include MyHelper
  end
end
4 голосов
/ 17 февраля 2012

Определение ActiveAdmin::ViewHelpers в app/admin/active_admin/view_helpers.rb работает для меня с activeadmin 0.3.4 и 0.5.0.

3 голосов
/ 13 ноября 2015

Использование activeadmin 1.0.0.pre1 из git: //github.com/activeadmin/activeadmin.git

Рельсы 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 %>
2 голосов
/ 26 февраля 2015

Вы также можете использовать партиалы ActiveAdmin:

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

И внутри app/views/admin/_my_partial.html.arb ваш код ru_ active_admin.

1 голос
/ 10 февраля 2013

Что работало для меня с Rails 3.2.11 и gem activeadmin (0.5.1), так это не добавление файла app / active_admin / view_helpers.rb или объявление каких-либо модулей в config / initializer / 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

Отображение переключателей для формы ввода.

Не уверен, почему proc{} требуется вне блока form do |f|, но если кто-нибудь сможет объяснить, почему это плохая идея, я найду другой способ.

...