Rails - 创建一个帮助方法,打印所有对象的特定属性(代替渲染数组)

时间:2011-07-22 01:31:35

标签: ruby-on-rails ruby helper

很抱歉这个简单的问题,但我被困在这里。

我正在尝试创建一个辅助方法,它只是为每个对象打印我的表“Term”的属性“name”。

我试过了:

def display_name(terms)
  terms.each do |term|
    p term.name
  end
end

但是不是打印每个对象名称,而是为每个具有所有属性的对象打印一个数组。

举个例子:

[#<Term id: 1, name: "test", definition: "first definition", created_at: "2011-07-21 14:52:12", updated_at: "2011-07-21 14:52:12">, 
 #<Term id: 2, name: "second test", definition: "blabla", created_at: "2011-07-20 18:00:42", updated_at: "2011-07-20 18:04:15">

我试图找到我可以用文档做什么(content_tag,concat,collect)但它似乎没有提供我想要的结果..

感谢您的解释

1 个答案:

答案 0 :(得分:4)

之所以这样,是因为它实际上并没有打印名称,而是从terms.each返回值,因为那是方法中的最后一个语句。

我可能会使用map方法首先将所有名称收集到一个数组中,如果你想要一个String而不是一个数组,那么我会join使用任何首选的分隔符,比如这样:

def display_name(terms)
  terms.map(&:name).join ", "
end

如果您愿意,还可以添加一个参数来选择分隔符。像这样:

def display_name(terms, sep = ", ")
  terms.map(&:name).join sep
end

# in view
display_name(collection, "<br/>")

默认情况下,它会使用逗号分隔它们,但您可以手动选择其他内容。