2012-02-20 192 views
1

Rails中用于在部分内部创建逗号分隔列表的最优雅方式是什么?Rails使用逗号分隔数组项目,部分内部使用逗号

我刚刚发现,您可以使用partials遍历从另一个视图模板发送的集合。因此,在视图模板,我有:

<% render @dvd.director %> 

然后在/view/directors/_director.html.erb:

<%= director.director %> 

这实际上确实是这样的:

@dvd.director.each { |d| puts d.director } 

现在,我知道我可以使用.join像这样:

<% @dvd.director.map { |t| t.director }.join(", ") %> 

但是由于部分已经遍历数组中的每个条目,所以我怎样才能恰当地分开列表,并且最后一个(或一个)最后一个逗号没有?

很多参赛作品只有一位导演,我只是想分开那些有不止一位导演。我知道我可以手动完成所有这些工作(使用正常的非迭代部分并自己创建.each循环),但是我正在尝试这样做,并学习Rails的方式。

谢谢。

编辑

试图解释好一点,@ dvd.director返回像ActiveRelation对象,以便:

[#<Director id: 13, director: "Andrew Stanton">, #<Director id: 14, director: "Lee Unkrich">] 

所以我不能只是做@dvd.director.join(', ')

是还有另外一种方法可以获得非

@dvd.director.each { |dir| dir.director } 

因为我有同样的问题,我必须数它们或确保它不是最后一项,然后我在它们之间输入逗号,或者只提取导演名称并将它们放入字符串或类似内容中。如果我可以加入,那会很好。

回答

5

如果数组中只有一个元素,Ruby的join方法将不会添加分隔符。

你应该能够做到为任意大小的名单如下:

@dvd.director.map(&:director).join(", ") 
+0

太好了,这正是我需要的,谢谢! – kakubei 2012-03-19 13:02:37

+1

如果我已经使用'map(&:director)',有没有办法在该文件中添加link_to? – kakubei 2012-03-19 14:10:20

+0

尝试类似这样的: '= dvd.directors.map {| director | link_to director.name,dvd_director_path(dvd,director)}。join(“,”).html_safe' – 2014-03-03 02:30:48