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

Ruby on rails 在Rails模板中使用条件语句修饰符,ruby-on-rails,ruby,Ruby On Rails,Ruby,我有一个生成Javascript对象的rails模板(.rhtml文件)。它看起来如下所示: var volumes = { <% for volume in @volumes %> <%= volume.id %> : <%= volume.data %> <%= ',' unless volume === @volumes.last %> <% end %> }; var卷={ : }; 请注意,除

我有一个生成Javascript对象的rails模板(.rhtml文件)。它看起来如下所示:

var volumes = {
  <% for volume in @volumes %>
    <%= volume.id %> : <%= volume.data %> 
    <%= ',' unless volume === @volumes.last %>
  <% end %>
};
var卷={
:  
};
请注意,
除非
语句修饰符禁止在最后一个元素后打印逗号(以满足Internet Explorer的要求,它不支持JSON属性声明中的尾随逗号)


这似乎是可行的,但就风格而言,人们认为依靠模板中的
生成适当的
呈现
调用合理吗?

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

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

甚至:

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


要获得“a:something,b:something,c:anything,d:other thing.”

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

var volumes = <%= @volumes.inject({}){|h,v| h.merge(v.id=>v.data)}.to_json %>;
然后在视图中,您可以放置更简单的代码:

var volumes = <%= Volume.to_hash(@volumes).to_json %>;
var卷=;

在JavaScript中并不完全合法,但是嘿,不管你怎么想,该死的吉姆。你到我家来吃我的自制排骨,然后你在公共场合指出我甚至没有读过这个问题,然后注意到“var volumes=…”接下来是什么,偷了我的小狗?嗯,自制排骨。谢谢,伙计,它们很好吃。谢谢,你说得对,这是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 %>;