2012-11-02 47 views
2

我是新来的rails,我想导出字典(字符串)。 目前我使用这段代码Rails:CSV数组到字符串(转换)

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

+1

我不完全了解你的问题,但你几乎可以肯定除非你想要'nil'的情况,否则我们希望将'uniq!'更改为'uniq'。 –

+0

您尚未提供足够的信息以获得真实答案。请编辑你的问题,并包含示例输入(即使是'p Competency.first'也会有帮助),以及你想要的输出示例。 –

+0

感谢AndrewHubbs的建议。 @MarkThomas,我编辑了我的问题。 – user1795503

回答

1

行不会是行逗号分隔,他们很可能是新的行结束,如果你想要在单独的行上,你应该尝试用新行代替逗号。

+0

你能举个例子吗? – user1795503

0

除了只用逗号连接字符串之外,你应该使用csv内置的csv库,而不是:

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

我已经尝试过,但是这只适用于包括重复。 – user1795503

+1

这只是一个例子。这是你的工作来实现它。 – pguardiario