8

我在我的 Ruby on Rails 应用程序中有一个直接的模型,它也可以在我的 rails_admin 实例中使用。rails_admin 的用户需要每天来上传 CSV 或 XLS 文件,并根据我将在后端呈现的一些逻辑,根据 CSV/XLS 中的数据创建模型实例。我不需要在文件系统上保留 CSV 或 XLS,所以这不是问题。问题是,我不完全确定如何在 rails_admin 中获得一个界面,用户可以在其中上传 CSV/XLS,点击上传,而后端应该负责其余的工作。

rails_admin 对此有支持吗?我可以通过它创建一个界面,我可以在其中上传文件以供我的一个模型处理吗?

4

3 回答 3

4

看起来您可能必须创建自定义操作和视图。一种方法是使用这个自定义操作插件这里还有一个关于如何构建自定义操作的教程。 我还使用了 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/ 中,您可以使用 multipart 处理表单。我不包括部分代码,如果您想让我了解一下,请告诉我。

您可能还希望对模型范围采取行动:

    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 回答
3

您可以在 RailsAdmin 中创建一个自定义操作,该操作将负责获取上传的文件并对其进行处理。

因此,在您的文件 app/admin/your_model.rb 中,您可以添加如下内容:

  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

在您看来,只需添加一个带有 multipart 选项的表单

<%= form_tag import_products_path, multipart: true do %>
  <%= file_field_tag :file %>
  <%= submit_tag "Import" %>
<% end %>
于 2013-11-06T09:52:31.520 回答
-1

这个你可以看到你可以从回调中调用你想要的。

您还可以创建自定义操作来处理您的 CSV。

或者您可以使用现有插件进行 CSV 导入。

于 2013-10-31T19:34:24.080 回答