ruby 助手围绕关联创建视图文本
Posted
技术标签:
【中文标题】ruby 助手围绕关联创建视图文本【英文标题】:ruby helpers to create views' text around associations 【发布时间】:2011-07-10 17:12:21 【问题描述】:我不知道这叫什么,但我有一个模型 a,它 has_many b。在视图中显示某个模型 a 时,我想打印一些描述它具有的所有模型 b 关联的文本,如下所示:
“与 foo、bar、baz 和 ## more...有关联...”
foo、bar、baz 是三个 mobdel b 的名称。如果超过 3 个,我不想打印所有的名字,所以我想用剩余的关联 # 来跟踪它。
我可以在 ruby 中以编程方式执行此操作,但我想知道是否存在一些可以为我执行此操作的辅助方法..
谢谢。
【问题讨论】:
【参考方案1】:带有范围检查的版本 + 将项目转换为字符串的可选块:
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 = %wa 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
【讨论】:
它没有回答这个问题:他怎么能自动获得关联? 部分答案应该是使用reflect_on_all_associations
【参考方案2】:
我看不出有什么方法可以轻松做到这一点,而获得它的 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)
你应该得到你想要的。
【讨论】:
它没有回答这个问题:他怎么能自动获得关联? 部分答案应该是使用reflect_on_all_associations
@apneadiving,当我读到这个问题时,dhruvg 知道这三个或更多的东西都是 B 类的,“模型 a has_many b”。 dhruvg 并不是在寻找所有类型的所有关联,因此不需要reflect_on_all_associations
。这就是没有被问到的问题的答案。
@Ray Baxter:恕我直言,我认为他想找回模型内部的内容。无论如何,让提问者说:我没有放任何-1。以上是关于ruby 助手围绕关联创建视图文本的主要内容,如果未能解决你的问题,请参考以下文章
Ruby on Rails 使用视图助手中的变量在视图中动态生成字段名称
如何在控制器或视图之外使用 Zend Framework 部分视图助手?