项目可以有很多标签。编辑项目时,我想列出输入字段中的所有标记(stackoverflow样式)。在Rails 3中,我有以下代码,在调用join(' ')
之前,我将所有名称都推送到数组中,但是有更快/更优雅的方式吗?
@tags = @project.tags
@tags_array = []
@tags.each do |tag|
@tags_array << tag.name
end
@tags_string = @tags_array.join(' ')
答案 0 :(得分:6)
也许你想要的是Enumerable#collect
方法:
@tags_string = @project.tags.collect(&:name).join(' ')
当您尝试将一个列表转换为另一个相同大小的列表时,Collect会派上用场,这正是这里的模式。
&:name
部分表示“在给定对象上调用方法名称”,并且可以等同于{ |t| t.name }
拼写。
Enumerable库非常棒,您应该仔细查看它并熟悉各种方法,因为它可以为您节省大量时间。
答案 1 :(得分:0)
一种方法是在迭代@tags数组时使用线程。看看这篇优秀的文章http://rubysource.com/threading-ruby/
其次看来@tag是一个数组 我会使用map返回一个名字数组,然后将它们连接到一个字符串
names = @tags.map{|tag| tag.name}.join(' ')