我不确定这叫什么,但我有一个模型a has_many b。当在视图中显示某个模型a时,我想打印一些描述所有模型b关联的文本,如下所示:
“与foo,bar,baz和##更有关联......”
foo,bar,baz是三个mobdel b的名字。如果超过3个,我不想打印所有的名字,所以我想用剩余的协会余额来追踪它。我可以在ruby中以编程方式执行此操作,但我想知道是否存在一些可以为我执行此操作的辅助方法..
感谢。
答案 0 :(得分:0)
我没有看到一种方法可以轻松地做到这一点,并且获得它的ruby / rails代码非常简单。那么为什么不自己做一个辅助方法呢?您方法的签名可以是:
def truncate_models(models, numbers)
models[0..numbers-1].map{|m| m.name}.join(", ") + "and #{models.size - numbers} more..."
end
所以通过调用(以HAML方式)
.models
Has an association with
= truncate_models(models, 3)
你应该得到你想要的东西。
答案 1 :(得分:0)
带范围检查的版本+用于将项目转换为字符串的可选块:
def enumerate_as_text(seq, max, &block)
text = seq.first(max).map { |itm|
block_given? ? yield(itm) : itm.to_s
}.join(", ")
text += ", and #{seq.length - max} more" if max < seq.length
text
end
试运行:
blob = %w{a b c d e f g h i j}
puts blob.length
puts blob.join(", ")
puts enumerate_as_text(blob, 1)
puts enumerate_as_text(blob, 4)
puts enumerate_as_text(blob, 9)
puts enumerate_as_text(blob, 10)
puts enumerate_as_text(blob, 11)
puts enumerate_as_text(blob, 20) { |itm| "itm: #{itm}" }
输出:
10
a, b, c, d, e, f, g, h, i, j
a, and 9 more
a, b, c, d, and 6 more
a, b, c, d, e, f, g, h, i, and 1 more
a, b, c, d, e, f, g, h, i, j
a, b, c, d, e, f, g, h, i, j
itm: a, itm: b, itm: c, itm: d, itm: e, itm: f, itm: g, itm: h, itm: i, itm: j