8

私の Ruby on Rails アプリケーションには、私の rails_admin インスタンスでも利用できる単純なモデルがあります。rails_admin のユーザーは、毎日アクセスして CSV または XLS ファイルをアップロードし、バックエンドでレンダリングするいくつかのロジックに基づいて、CSV/XLS 内のデータに基づいてモデルのインスタンスを作成する必要があります。ファイルシステムに CSV や XLS を永続化する必要はないので、それは問題ではありません。問題は、ユーザーが CSV/XLS をアップロードし、アップロードを押して、バックエンドが残りを処理する必要がある rails_admin でインターフェイスを取得する方法が完全にはわからないことです。

rails_admin はこれをサポートしていますか? モデルの 1 つで処理するファイルをアップロードできるインターフェイスを作成できますか?

4

3 に答える 3

4

カスタム アクションとビューを作成する必要があるようです。これを行う 1 つの方法は、このカスタム アクション プラグインを使用することです。カスタム アクションの作成方法に関するチュートリアルもここにあります。 SmarterCSV も使用しましたが、見事に機能します。

カスタム アクションを Rails Admin に登録するには、 config/initializers/rails_admin.rb でこれを行います。

module RailsAdmin
  module Config
    module Actions
      class YourClass < RailsAdmin::Config::Actions::Base
        RailsAdmin::Config::Actions.register(self)

         ##code here, as explained more below

      end
    end
  end
end

このクラスでは、基本アクションのいずれかを継承できます。したがって、カスタム パーシャルを登録するには、そのクラスで次のようにします。

    # View partial name (called in default :controller block)
    register_instance_option :template_name do
      :your_class
    end

_your_class パーシャルは app/views/rails_admin/main/ にある必要があります。マルチパートでフォームを処理できます。部分的なコードは含めません。試してみたい場合はお知らせください。

おそらく、モデル スコープでのアクションも必要になるでしょう。

    register_instance_option :collection? do
      true
    end

コントローラーのコードを挿入します。おそらく、ここで処理を行うのが最善でしょう。たとえば、次のようになります。

register_instance_option :controller do
      Proc.new do

        @order = Order.import(params[:file])
        f = SmarterCSV.process(file.tempfile)
              f.each do |r|

               #combine date and time fields 
               r[:date_time] = [r[:date],r[:time]].join(' ')

                Order.create("date" => r[:date_time])
        end
      end
    end

次に、次のように RailsAdmin::Config::Actions にアクションを登録する必要があります (このコードは config/initializers/rails_admin.rb に配置されています)。

module RailsAdmin
  module Config
    module Actions
      class ApproveReview < RailsAdmin::Config::Actions::Base
        RailsAdmin::Config::Actions.register(self)
      end
    end
  end
end

次に、カスタム アクションを config/initializers/rails_admin.rb のアクション構成にリストする必要があります。

RailsAdmin.config do |config|
  config.actions do
    dashboard
    index
    new

    your_class

    show
    edit
    delete
  end
end

チュートリアルにはさらに詳細がありますが、それはかなり堅実なスタートになるはずです!

于 2013-11-07T01:46:26.790 に答える