すべてのモデルで同じアクションを定義する 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」にあるべきではなく、呼び出しは不要であるため、これは面倒に思えます。