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

发布于 2024-12-23 07:06:21 字数 166 浏览 1 评论 0原文

我正在创建一个供 Formtastic 使用的助手,但收到 未定义的局部变量或方法 错误。我不知道该把它放在哪里才能发挥作用。

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

I'm creating a helper to be used by Formtastic but I get the undefined local variable or method error. I don't know where to put it so it can work.

I already tried in the application_helper.rb and in app/helpers/active_admin/view_helpers.rb

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(10

夜血缘 2024-12-30 07:06:21

您可以按照您的尝试在 app/helpers/ 中定义它们,但您需要通过活动管理员的初始值设定项包含它们,如下所示:

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

module ActiveAdmin::ViewHelpers
  include ApplicationHelper
end

You can define them in app/helpers/ as you tried but you need to include them trough the active admin's initializer like this:

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

module ActiveAdmin::ViewHelpers
  include ApplicationHelper
end
小矜持 2024-12-30 07:06:21

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

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

You need to put your helper functions in app/helpers/active_admin/views_helper.rb file
Example:

module ActiveAdmin::ViewsHelper #camelized file name
  def my_helper 
       # do something 
  end 
end 
初见你 2024-12-30 07:06:21

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

What I have found using ActiveAdmin 0.6.1 is that ActiveAdmin will look for helpers in app/helpers/active_admin/*_helper.rb, but the name doesn't really matter.

What does matter is:

  1. the filename must end in "_helper.rb"
  2. the module name must be the camel-case of the file name
  3. the file must be in app/helpers/active_admin/ directory.

If anyone knows where this is officially documented, that would be awesome.

Here is an example: https://gist.github.com/afred/7035a657e8ec5ec08d3b

﹎☆浅夏丿初晴 2024-12-30 07:06:21
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定义

app/helpers/active_admin/view_helpers.rb

didn't help me

EDITED: i changed it to views_helper.rb & ViewsHelper accordingly and it worked

*but if you want to define it only for certain resource, you can do it in my way


i had to define

#app/helpers/active_admin/categories_helper.rb

module ActiveAdmin::CategoriesHelper

  def helper_method

  end

end

for my active_admin resource app/admin/categories.rb

伴梦长久 2024-12-30 07:06:21

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

ActiveAdmin.register MyModel do
  controller do
    include MyHelper
  end
end

Another way to do this is to make the specific ActiveAdmin controller generated behind-the-scenes include the helper. This method will allow making the inclusion of the helpers explicit per file rather than global.

ActiveAdmin.register MyModel do
  controller do
    include MyHelper
  end
end
つ可否回来 2024-12-30 07:06:21

我可以让它在 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(我对其他版本没有任何想法):(

I can make it work in ActiveAdmin 0.6.1 (finally!). The solution is to create a helper module as following:

# 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

then include this module this way:

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

ActiveAdmin.register [Resource] do
  ...

end

Actually, it's not a nice solution but it's DRY and working good. I have already read and tried a lot of methods and solutions such as ViewHelpers module (put under 'app/helpers' or 'app/admin/active_admin'), ActiveAdmin::DSL monkey patching, ... but those never worked in version 0.6.1 (I don't have any ideas about other versions) :(

躲猫猫 2024-12-30 07:06:21

app/admin/active_admin/view_helpers.rb 中定义 ActiveAdmin::ViewHelpers 适用于 activeadmin 0.3.40.5。 0 。

Defining ActiveAdmin::ViewHelpers in app/admin/active_admin/view_helpers.rb works for me with activeadmin 0.3.4 and 0.5.0.

沙与沫 2024-12-30 07:06:21

使用来自 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 %>

Using activeadmin 1.0.0.pre1 from git://github.com/activeadmin/activeadmin.git

Rails 4.2.1

This worked for me...

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 %>
梦途 2024-12-30 07:06:21

您还可以使用 ActiveAdmin 部分:

renderpartial: 'admin/my_partial', locals: { var: my_var }

以及 app/views/admin/_my_partial.html.arb你的 active_admin ruby​​ 代码。

You can also use ActiveAdmin partials :

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

And inside app/views/admin/_my_partial.html.arb your active_admin ruby code.

琉璃梦幻 2024-12-30 07:06:21

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{} ,但如果有人能解释为什么这是一个坏主意,我会找到一个不同的方式。

What worked for me with Rails 3.2.11 and and gem activeadmin (0.5.1) was not adding the app/active_admin/view_helpers.rb file, or declaring any modules in config/initializers/active_admin.rb

I put my helpers logically, by model, into the app/*_helpers.rb files. Then inside the app/admin/model.rb file I used:

# app/admin/[resource].rb
ActiveAdmin.register [Resource] do
  ...
  filter :gender, as: :select, collection: proc{genders}
  ...
end

To use the helper in filters, to display a drop down list of genders to filter on, in the list view. For the corresponding create form fields, I used:

# 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

To display radio buttons for the input form.

Not sure why the proc{} is required outside of the form do |f| block, but if anyone can explain why it's a bad idea, I'll find a different way.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文