0

我正在尝试创建一个表单,我可以在其中上传 CSV 文件以在导入之前导入或预览。

在我的表格中,我有:

<%= form_for(@contact_import, :remote => true) do |f| %>
  <% if @contact_import.errors.any? %>
    <div id="error_explanation">
      <h2><%= pluralize(@contact_import.errors.count, "error") %> prohibited this import from completing:</h2>
      <ul>
      <% @contact_import.errors.full_messages.each do |msg| %>
        <li><%= msg %></li>
      <% end %>
      </ul>
    </div>
  <% end %>

  <div class="field">
    <%= f.file_field :file %>
  </div>
  <%= f.submit "Import" %>
  <%= f.submit "Preview", :name => 'preview' %>

在我的控制器中:

  def create
    @contact_import = ContactImport.new(params[:contact_import])

    if params[:preview]
      logger.debug "Let's preview the contacts:" + params.inspect
      @contacts = @contact_import.update_preview
      @contact_attributes = ContactImport.mapping_attributes
      #I should now update the preview div
    else
      logger.debug("Got the commit" + params.inspect)
      if @contact_import.save
        redirect_to root_url, notice: "Imported contacts successfully."
      else
        render :new
      end
    end
  end

如何通过上传 CSV 文件更新视图以显示预览联系人?

注意:此时的 CVS 文件处理在模型中,已被省略。

4

1 回答 1

2

我会将它们带到新页面的另一个版本,解析文件并填充 contact_import 对象 - 准备带有隐藏变量的页面以提交到创建页面。

您可以使用从文件生成的 @contact_import 查找此按钮推送并呈现预览页面

  def create
    @contact_import = ContactImport.new(params[:contact_import])

    if params[:preview]
      render :preview 
    elsif @contact_import.save
      redirect_to root_url, notice: "Imported contacts successfully."
    else
      render :new
    end
  end

preview.html.erb 类似于 new.html.erb,但具有隐藏的输入和后退按钮。从预览发布也将去创建,但不应导致任何错误情况。

我不相信您需要一条新路线 - 在这种情况下,只需渲染 :preview 而不是 :new 。

于 2013-05-23T22:46:17.557 回答