Подтвердить что ты не робот

Rails 3. Как добавить помощника, который будет использовать ActiveAdmin?

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

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

4b9b3361

Ответ 1

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

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

module ActiveAdmin::ViewHelpers
  include ApplicationHelper
end

Ответ 2

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

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

Ответ 3

То, что я нашел с помощью ActiveAdmin 0.6.1, заключается в том, что ActiveAdmin будет искать помощников в app/helpers/active_admin/* _ helper.rb, но имя действительно не имеет значения.

Что имеет значение:

  • имя файла должно заканчиваться на "_helper.rb"
  • имя модуля должно быть верблюжьим регистром имени файла
  • файл должен находиться в каталоге app/helpers/active_admin/.

Если кто-нибудь знает, где это официально задокументировано, это было бы потрясающе.

Вот пример: https://gist.github.com/afred/7035a657e8ec5ec08d3b

Ответ 4

app/helpers/active_admin/view_helpers.rb

не помог мне

EDITED: я изменил его на 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

Ответ 5

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

Ответ 6

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

Ответ 7

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

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 %>

Ответ 8

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

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

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

Ответ 9

Что работало для меня с 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

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

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

Ответ 10

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

ActiveAdmin.register MyModel do
  controller do
    include MyHelper
  end
end