Rails 3. Как добавить помощника, который будет использовать ActiveAdmin?
Я создаю помощник, который будет использоваться Formtastic, но я получаю ошибку undefined local variable or method
. Я не знаю, куда его поместить, чтобы он мог работать.
Я уже пробовал в application_helper.rb и в app/helpers/active_admin/view_helpers.rb
Ответы
Ответ 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