2013-10-29 11 views
7

rails_adminインスタンスでも利用可能なRuby on Railsアプリケーションでは、真っ直ぐなモデルがあります。 rails_adminのユーザーは毎日来て、CSVまたはXLSファイルをアップロードし、バックエンドでレンダリングするいくつかのロジックに基づいて、CSV/XLS内のデータに基づいてモデルのインスタンスを作成する必要があります。ファイルシステムにCSVやXLSを残す必要はないので、問題はありません。問題は、ユーザがCSV/XLSをアップロードし、アップロードをヒットし、バックエンドが残りを処理する必要があるrails_adminでインターフェイスを取得する方法を完全にはわからないということです。Rails Admin - モデルのインスタンスを作成するためにCSVをアップロード

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

+0

アップロードに使用している宝石はどれですか?あなたが欲しいものバックエンドでファイルをアップロードするか、バックグラウンドでcsv/xlsデータを処理しますか? –

+0

ファイルをアップロードしてバックグラウンドで処理したいだけです。ファイルをポストしてから、非同期ジョブをオフにすることができます。私は必ずレール管理から直接このファイルを使ってクラスのモデルやインスタンスを管理しているわけではありません。私は人々がそこを通ってアップロードする方法が必要です。 – randombits

+0

あなたはそれをやることができます。最も良い方法は、クリップや搬送波の宝石を使用してファイルをアップロードすることです。 rubyはそれを処理するcsvライブラリを持っています。いつでも宝石を使うか、単純なスレッドを使ってバックグラウンドで処理します。 –

答えて

-1

thisを見ると、コールバックから必要なものを呼び出すことができます。

また、custom actionを作成して、CSVを処理することもできます。

またはexisting pluginをCSVインポートに使用できます。

3

アップロードされたファイルの取得と処理を担当するカスタムアクションをRailsAdminで作成することができます。

member_action :upload_csv, :method => :post do 
    # param[:file] will contain your uploaded file 
    # So add your logic here to open/parse the file 
    # Take a look at this link: http://railscasts.com/episodes/396-importing-csv-and-excel 
    end 

そして、あなたのビューで、単にそれがどのように見えるマルチパートのオプション

<%= form_tag import_products_path, multipart: true do %> 
    <%= file_field_tag :file %> 
    <%= submit_tag "Import" %> 
<% end %> 
+2

あなたはActiveAdminについて話していますが、質問はRailsAdminです。 – kuboon

4

でフォームを追加します。あなたのような何かを追加することができますyour_model.rbファイルアプリ/管理/中のSO

カスタムアクションとビューを作成する必要があります。これを行う1つの方法はthis custom actions pluginを使用することです。 There is also a tutorial about how to build a custom action here.私もSmarterCSVを使いました。それはすばらしく動作します。

はRailsの管理とカスタムアクションを登録するには、設定/初期化子/ 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 

をこのクラスでは、the base actionsのいずれかを継承することができます。だから、あなたがどうなるというクラスで、カスタム部分を登録するには:あなたの_your_classパーシャルアプリ/ビュー/ rails_admin//メインになっている必要があり

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

、あなたはマルチパートでフォームを処理することができます..私は含めていませんよあなたが私にスイングを取らせたいなら、それを私に知らせてください。

おそらく、また、モデルの範囲であなたの行動をお勧めします:

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 

チュートリアルで詳細がありますが、これはかなり安定したスタートになるはずです。

関連する問題