Rails 3.如何添加ActiveAdmin将使用的帮助程序?

时间:2011-12-29 20:35:41

标签: ruby-on-rails ruby helpers activeadmin

我正在创建一个由Formtastic使用的帮助器,但是我收到了undefined local variable or method错误。我不知道放在哪里它可以工作。

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

10 个答案:

答案 0 :(得分:70)

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

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

module ActiveAdmin::ViewHelpers
  include ApplicationHelper
end

答案 1 :(得分:59)

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

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

答案 2 :(得分:23)

我使用ActiveAdmin 0.6.1发现,ActiveAdmin将在app / helpers / active_admin / * _ helper.rb中寻找帮助者,但名称并不重要

重要的是:

  1. 文件名必须以“_helper.rb”
  2. 结尾
  3. 模块名称必须是文件名的驼峰式案例
  4. 该文件必须位于app / helpers / active_admin /目录中。
  5. 如果有人知道这是正式记录在哪里,那就太棒了。

    以下是一个示例:https://gist.github.com/afred/7035a657e8ec5ec08d3b

答案 3 :(得分:12)

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

答案 4 :(得分:7)

我可以在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 monkey patching,...但是那些从未在版本中工作过的0.6.1(我对其他版本没有任何想法):(

答案 5 :(得分:4)

使用ActiveAdmin::ViewHelpersapp/admin/active_admin/view_helpers.rb为我activeadmin 0.3.4定义0.5.0

答案 6 :(得分:4)

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

ActiveAdmin.register MyModel do
  controller do
    include MyHelper
  end
end

答案 7 :(得分:3)

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

Rails 4.2.1

这对我有用......

<system.serviceModel> <serviceHostingEnvironment multipleSiteBindingsEnabled="false" /> <services> <service name="Sync.Inbound" behaviorConfiguration="serviceWebConfiguration"> <endpoint address="" binding="webHttpBinding" bindingConfiguration="defaultRest" ... </service> </services> <bindings> <webHttpBinding> <binding name="defaultRest" maxReceivedMessageSize="2147483647" maxBufferSize="2147483647" maxBufferPoolSize="2147483647" transferMode="Streamed"> <readerQuotas maxStringContentLength="2147483647" maxArrayLength="2147483647" maxBytesPerRead="2147483647" maxDepth="2147483647" maxNameTableCharCount="2147483647" /> <security mode="None" /> </binding> </webHttpBinding> </bindings>

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

答案 8 :(得分:2)

您还可以使用ActiveAdmin partials:

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

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

答案 9 :(得分:1)

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