【问题标题】:Rails: CSV Array to string (convert)Rails:CSV 数组到字符串(转换)
【发布时间】:2012-10-23 14:21:45
【问题描述】:

我是 Rails 新手,我想导出一个字典(字符串)。 目前我正在使用这段代码

    Competency.order(:competencies).map(&:competencies).uniq!.join(", ")

生成:

   Build a cage!, Build tha pizza, Demonstrated ability in flying, Demonstrated ability in pizza baking

我想将它导出到 csv,但问题是它是一个数组。我想创建单独的字符串(逗号分隔)并将每个字符串显示在不同的行上。目前,将其导出到 csv 时,所有内容都显示在一行上。

任何线索如何做到这一点?我创建了一个数据数组,因为有很多重复数据,而这段代码正在过滤掉所有重复数据。

在我的控制器中:

   format.csv { render Competency.order(:competencies).map(&:competencies).uniq!.join(", ") }

希望有人能帮助我,非常感谢。

编辑:

理想情况下,我想获取所有能力并获得没有重复的输出,这是我的控制器:

    def dictionary
      @competencies = Competency.all

        respond_to do |format|
        format.html { render html: positions_dictionary_path }
        format.csv { render Competency.order(:competencies).map(&:competencies).uniq!.join(", ") }
        format.xls { send_data Competency.order(:competencies).map(&:competencies).uniq!.join(", ") }

      end
    end

通常在视图文件中你会这样做:

      <div>
        <% @posts.each do |competency| %>
          <%= competency.competencies %>
        <% end %>
      </div>

这会生成所有能力的列表,但也会生成重复项。我的解决方案是创建一个数组。但是,这在导出到 csv 时会产生问题(因为我需要将每个输出放在不同的行/行上。所以我的问题是,如何生成所有“能力”的列表而不重复?

【问题讨论】:

  • 我不完全理解您的问题,但您几乎肯定会想要将 uniq! 更改为 uniq,除非您想要 nil 的情况。
  • 您没有提供足够的信息来获得真正的答案。请编辑您的问题并包含示例输入(即使是 p Competency.first 也会有所帮助),以及您想要的输出示例。
  • 感谢 AndrewHubbs 的建议。 @MarkThomas,我已经编辑了我的问题。

标签: ruby arrays ruby-on-rails-3 csv export-to-csv


【解决方案1】:

行不会用逗号分隔。他们很可能是新线路终止。如果您希望将它们放在单独的行上,您应该尝试使用新行而不是逗号将它们连接起来。

【讨论】:

    【解决方案2】:

    csv 不仅仅是用逗号连接字符串。您应该改用内置的 csv 库:

    require 'csv'
    CSV.generate{|csv| rows.each{|row| csv << row}}
    

    【讨论】:

    • 我已经尝试过了,但这仅适用于包括重复项。
    • 这只是一个例子。实施它是你的工作。
    猜你喜欢
    • 1970-01-01
    • 2017-10-27
    • 2015-02-21
    • 2011-03-25
    • 2015-05-22
    相关资源
    最近更新 更多