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 使用视图助手中的变量在视图中动态生成字段名称

ruby on rails 中的关联

(简单)Ror:在视图中创建助手。但是怎么做?

如何在控制器或视图之外使用 Zend Framework 部分视图助手?

在创建控制器和模型之后(仅)创建 Ruby on Rails 视图

在视图中创建 Ruby on Rails 矩阵表