【问题标题】:Remove whitespace in Haml with a loop使用循环删除 Haml 中的空格
【发布时间】:2012-06-28 22:34:55
【问题描述】:

这个问题和这个问题类似,但多了一个皱纹:

Auto-removing all newlines from Haml output

假设您正在使用如下代码构建一个以逗号分隔的链接列表:

- foos.each_with_index do |foo, i|
  = ', ' if i > 0
  = link_to foo.name, foo

如何在逗号前不出现空格的情况下做到这一点?我看不出有任何方法可以使用现有的鳄鱼运算符或surround/precede/succeed

有没有办法重写循环,以便您可以使用这些运算符?

【问题讨论】:

    标签: ruby-on-rails haml


    【解决方案1】:

    HAML 带有一个succeed 方法,可以在这里使用:

    - foos.each do |foo|
      = succeed (foo == foos.last) ? '' : ', ' do
        = link_to foo.name, foo
    

    使用字符串插值或表达式,您可以有条件地显示空字符串或带空格的逗号。

    【讨论】:

    • 我喜欢将succeed 的参数设置为空字符串的想法。我认为您正在做一些额外的字符串工作,但可以写这个:= succeed(foo == foos.last ? '' : ', ') do。对吗?
    • 是的,你可以。第一次尝试时我出错了,但我可能还有其他语法错误。刚刚启动了我的 Rails 服务器并进行了测试。没有插值可以正常工作。 @PaulAJungwirth
    【解决方案2】:

    由于link_to只是一个返回字符串的助手,你可以在一条语句中完成:

    - foos.each_with_index do |foo, i|
        = link_to(foo.name, foo) + (i < foos.length ? ', ' : '')
    

    但是,您可能希望将此代码提取到帮助程序中并编写测试。

    【讨论】:

    • 为我工作。我喜欢针对 0 而不是 length 进行测试,但我可以翻转 concat。
    • 一些更正:(1) 翻转+ 不起作用毕竟b/c 你仍然得到空白。 (2) 应该是length - 1,而不是length。 (3) 需要通过raw运行。
    猜你喜欢
    • 2011-07-05
    • 2014-07-26
    • 1970-01-01
    • 2011-08-06
    • 1970-01-01
    • 2017-06-16
    • 2017-11-17
    • 2012-08-05
    • 1970-01-01
    相关资源
    最近更新 更多