【问题标题】:ruby helpers to create views' text around associationsruby 助手围绕关联创建视图文本
【发布时间】:2011-07-10 17:12:21
【问题描述】:

我不知道这叫什么,但我有一个模型 a,它 has_many b。在视图中显示某个模型 a 时,我想打印一些描述它具有的所有模型 b 关联的文本,如下所示:

“与 foo、bar、baz 和 ## more...有关联...”

foo、bar、baz 是三个 mobdel b 的名称。如果超过 3 个,我不想打印所有的名字,所以我想用剩余的关联 # 来跟踪它。

我可以在 ruby​​ 中以编程方式执行此操作,但我想知道是否存在一些可以为我执行此操作的辅助方法..

谢谢。

【问题讨论】:

    标签: ruby-on-rails ruby views helpers


    【解决方案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 = %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
    

    【讨论】:

    • 它没有回答这个问题:他怎么能自动获得关联?
    • 部分答案应该是使用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。
    猜你喜欢
    • 1970-01-01
    • 2018-01-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-21
    相关资源
    最近更新 更多