代码之家  ›  专栏  ›  技术社区  ›  ykaganovich Mike Samuel

在Rails模板中使用条件语句修饰符

  •  2
  • ykaganovich Mike Samuel  · 技术社区  · 17 年前

    var volumes = {
      <% for volume in @volumes %>
        <%= volume.id %> : <%= volume.data %> 
        <%= ',' unless volume === @volumes.last %>
      <% end %>
    };
    

    注意 unless 语句修饰符,以禁止在最后一个元素后打印逗号(以满足Internet Explorer的要求,它不支持JSON属性声明中的尾随逗号)。

    <%= value unless condition %> 在模板中生成适当的 render 呼叫

    3 回复  |  直到 17 年前
        1
  •  6
  •   Jim Puls    17 年前

    我不明白为什么不可以,但一般来说,如果您发现自己在最后一个成员上设置了逗号条件,您可能希望使用 join

    <%= @volumes.map {|v| "#{v.id} : #{v.data}"}.join "," %>
    
        2
  •  3
  •   Raimonds Simanovskis    17 年前

    如果您想要构造JSON(顺便说一句,您正在构造JavaScript对象而不是数组),那么我建议使用to_JSON方法:

    var volumes = <%= @volumes.inject({}){|h,v| h.merge(v.id=>v.data)}.to_json %>;
    

    var volumes = <%= Hash[*@volumes.map{|v| [v.id, v.data]}.flatten].to_json %>;
    

    class Volume
      def self.to_hash(volumes)
        Hash[*volumes.map{|v| [v.id, v.data]}.flatten]
      end
    end
    

    然后在视图中,您可以放置更简单的代码:

    var volumes = <%= Volume.to_hash(@volumes).to_json %>;
    
        3
  •  0
  •   James A. Rosen    17 年前

    甚至:

    <%= @volumes.map { |v| "#{v.id} : #{v.data}"}.to_sentence -%>
    

    得到“a:什么,b:别的,c:什么,d:另一件。”

    推荐文章