4

すべてのモデルで同じアクションを定義する ActiveAdmin のヘルパー メソッドがあります。

「app/helpers/active_admin/import_helper.rb」内

module ActiveAdmin
  module ImportHelper

    def self.included(base)
      base.instance_eval do
        action_item only: :index do
          link_to "Import", action: :import
        end

        collection_action :import do
          render "admin/import"
        end

        controller do

          def save_csvimport(item)
            # .. import stuff

            redirect_to action: :index
          end

          def permitted_params
            params.permit!
          end
        end
      end
    end

  end
end

「app/admin/categories.rb」内

ActiveAdmin.register Store::Category do
  include ImportHelper

  config.filters = false

  collection_action :importcsv, method: :post do
    save_csvimport "Category"
  end
end

アプリの起動時に、次のエラーが表示されます。

app/helpers/active_admin/import_helper.rb:6:in `block in included': undefined method `action_item' for #<Module:0x007f93efabac40> (NoMethodError)

すべての「admin/*.rb」ファイルでこれらのメソッドを定義するにはどうすればよいですか? (このインポート機能は、すべてのモデルで同じです。)

Ruby 2.0 と Rails 4 を使用しています。

編集:

ImportHelper「app/admin/import_helper.rb」で次のように定義すると:

# Note no namespacing
module ImportHelper

  def self.included(base)
    base.instance_eval do
      action_item only: :index do
        link_to "Import", action: :import
      end

      collection_action :import do
        render "admin/import"
      end

      controller do

        def save_csvimport(item)
          # .. Import stuff

          redirect_to action: :index
        end

        def permitted_params
          params.permit!
        end
      end
    end
  end
end

そして、「categories.rb」は次のようになります。

ActiveAdmin.register Store::Category do

  config.filters = false

  require_relative "./import_helper"
  include ImportHelper

  collection_action :importcsv, method: :post do
    save_csvimport "Category"
  end
end

すべてが機能します。require_relativeただし、インポートファイルは「app/admin」にあるべきではなく、呼び出しは不要であるため、これは面倒に思えます。

4

1 に答える 1