Rails:CSV数组到字符串(转换)

时间:2012-11-02 21:45:35

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

我是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时产生问题(因为我需要不同行/行上的每个输出。所以我的问题是,如何生成所有“能力”的列表而不重复?

2 个答案:

答案 0 :(得分:1)

行不会以逗号分隔。它们很可能是新生产线终止的。如果你想在不同的行上使用它们,你应该尝试使用新行而不是逗号来加入它们。

答案 1 :(得分:1)

除了使用逗号加入字符串之外,csv还有更多内容。您应该使用内置的csv库:

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