【问题标题】:HAML How to define a method?HAML 如何定义一个方法?
【发布时间】:2019-02-06 14:28:16
【问题描述】:

我有以下红宝石方法:

def dedup_uniq(array)
 {
   uniq: array.uniq,
   dup: array.each_with_object(Hash.new(0)) { |e,h| h[e] += 1 }.select { |k,v| v > 1 }.keys
 }
end

如何在haml 代码中创建相同的方法?或者如何在我的 haml 文档中包含此方法?

谢谢。

【问题讨论】:

  • 你在使用 Rails 吗?如果是这样,为什么不使用辅助方法?
  • 我正在使用基于 ruby​​ 的.haml doc。我不知道如何使用辅助方法,或者它是否适用于haml。如果你能解释一下,我将不胜感激。谢谢。
  • 将该方法放入app/helpers/something.rb,在haml文件中,写= dedup_array([...])即可。
  • 但是,在haml 文件中分享您实际尝试使用该方法的目的 可能会对您有所帮助。在我看来,这可能是一个 XY 问题。
  • 作为对我之前的问题link 的回答,有人向我展示了如何用一种新方法解决我的问题。在那个链接上,事情得到了更好的解释。谢谢。

标签: html ruby methods haml


【解决方案1】:

如果您有一些独立的 HAML 文件并且您没有地方在其他地方定义该方法,请执行此操作。

  -def dedup_uniq(array)
    -{ uniq: array.uniq, dup: array.each_with_object(Hash.new(0)) { |e,h| h[e] += 1 }.select { |k,v| v > 1 }.keys }

永远不要在 Rails 视图中这样做,最好定义一个助手。

【讨论】:

    【解决方案2】:

    您不应在 HAML 中定义复杂的方法,而应使用辅助方法。只要您的 HAML 可以访问您的辅助方法,您就可以从您的 haml 文件中这样调用它:

    = dedup_uniq([:some, :example, :array, :items])
    

    但在您的情况下,您的方法正在返回一个哈希值,因此不确定您打算如何处理视图中的数据,但您可以访问该方法返回的对象。

    【讨论】:

    • 好的,所以我有我的.haml doc,其中有我的所有变量和我的代码,它们将由 haml 翻译成 html。我不知道如何使用辅助方法,也不知道在哪里添加它们。 @Tom Lord 说要把它们放在 app/helpers/something.rb 中,但我不知道 app 文件夹应该放在哪里。我查看了我的 ruby​​ 文件夹,但我没有 app 文件夹。
    • 您可能想知道我为什么要进行如此微不足道的编辑。这是因为我不小心对您的答案投了反对票,并且在没有您或其他人进行编辑的情况下无法删除该反对票。对不起!顺便说一句,我对 HAML 一无所知,所以无论如何都无法评估您的答案。当我认为您已经看到此评论时,我会删除它。
    • 好的。没问题。谢谢你让我知道。 :)
    猜你喜欢
    • 2012-08-12
    • 2020-06-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-08
    • 1970-01-01
    相关资源
    最近更新 更多