2012-03-17 74 views
1

所以我试图解析使用逗号分隔和输入的形式电子邮件列表内置在轨道3解析在轨使用CSV

这里CSV库是代码:

@variable = params[:body] 
@csv = CSV.parse(@variable, :col_sep => ",") 
    @csv.each do |row| 
    user = User.where(:email => row) 

但是,输出是这样的:


- - [email protected] 
    - ! ' [email protected]' 

因此,在@csv每一行,我试图去之上电子邮件的完整列表。我怎样才能将它们分开?谢谢!

回答

1

如果不将块作为参数传递,则CSV :: parse返回数组数组。因此,当您使用#each枚举@csv时,参数行将是一个字符串数组。您的代码建议不是单个字符串。

如果电子邮件地址是在您的CSV文件中的每一行的第一列,那么你将取代

User.where(:email => row) 

User.where(:email => row[0]) 

这不完全清楚你的CSV文件格式虽然。如果每行有多个电子邮件地址,或者将电子邮件地址放在不同的列中,则必须相应地修改代码。

+0

感谢您的回复。因此,我收到了用户输入的CSV,例如([email protected],[email protected],[email protected])。我想向每个用户发送一封电子邮件,因此我需要将这些值分开。我尝试了第[0]行,但它只给了我第一封电子邮件,并且它停止了循环... – 2012-03-18 18:23:00

+0

好吧,听起来你有一行有很多逗号分隔值。在这种情况下,使用CSV模块可能会起作用,但过度消耗。您可以使用String#split将params [:body]转换为一个字符串数组,而不是调用CSV#parse和each。或者你可以坚持你所做的。无论哪种方式,一旦你有一个字符串数组(这是目前的行),那么你可以使用整个数组来获取一组用户User.where(:email => row),或者你可以迭代该数组使用每个元素来单独处理每个元素。 – 2012-03-18 18:56:05

+0

如果您不知道,CSV,字符串,数组和其他标准类都记录在http://wwww.ruby-doc.org – 2012-03-18 18:57:48