web-dev-qa-db-ja.com

Rails 3. ActiveAdminが使用するヘルパーを追加するには?

Formtasticで使用するヘルパーを作成していますが、undefined local variable or methodエラー。それが機能するようにどこに置くべきかわかりません。

私はすでにapplication_helper.rbとapp/helpers/active_admin/view_helpers.rbで試しました

61
leonel

試したようにapp/helpers /でそれらを定義できますが、次のようにアクティブな管理者のイニシャライザーを通してそれらを含める必要があります。

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

module ActiveAdmin::ViewHelpers
  include ApplicationHelper
end
70

ヘルパー関数をapp/helpers/active_admin/views_helper.rbファイルに配置する必要があります例:

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

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

23
Mars Redwyne
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

12
okliv

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

実際には、これはニースのソリューションではありませんが、DRYであり、正常に動作しています。ViewHelpersモジュール( 'app/helpers'または 'app/admin/active_admin ')、ActiveAdmin :: DSLモンキーパッチ、...しかし、それらはバージョン0.6.1で動作しませんでした(他のバージョンについてのアイデアはありません):(

6
Anh Nguyen

ActiveAdmin::ViewHelpersapp/admin/active_admin/view_helpers.rbを定義すると、activeadmin 0.3.4および0.5.0で機能します。

4
tfischbach

これを行う別の方法は、舞台裏で生成された特定のActiveAdminコントローラーにヘルパーを含めることです。この方法により、グローバルではなくファイルごとにヘルパーを明示的に含めることができます。

ActiveAdmin.register MyModel do
  controller do
    include MyHelper
  end
end
4
Del

git://github.com/activeadmin/activeadmin.gitのactiveadmin 1.0.0.pre1を使用

レール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 %>
3
Leantraxxx

ActiveAdminパーシャルを使用することもできます:

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

そしてapp/views/admin/_my_partial.html.arb your_active_admin Rubyコード。

2
Luc Boissaye

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|が必要な理由はわかりませんが、なぜそれが悪い考えであるかを説明できる人がいれば、別の方法を見つけるでしょう。

1
samsmith