Ruby,比这更好的实现条件迭代的方法呢?

时间:2011-09-15 00:28:05

标签: ruby

我有一个数组@cities = ["Vienna", "Barcelona", "Paris"];

我试图在两者之间展示间隔物。但是,阵列中可能只有1个元素,在这种情况下我不想显示间隔符。而且数组也可能是空的,在这种情况下我想什么都不显示。

对于上面的数组,我想要以下输出:

Vienna
-----
Barcelona
-----
Paris

在实际打印城市名称之前,我使用erb模板cityview来应用格式,css等。简化,它看起来像这样:

<p><%= @cities[@city_id] %></p>

我已经实现了如下......

unless @array.empty?
    @city_id = 0;

    erb :cityview
end

unless @array[1..-1].nil? 
    @array[1..-1].each_index do |i|
        @city_id = i+1;

        puts "<p>-------</p>";

        erb :cityview
    end 
end

有更好的方法吗?

4 个答案:

答案 0 :(得分:6)

@cities.join("<p>--------</p>")

编辑以解决模板

这里我假设有一个erbs方法返回渲染模板而不进行放置。返回字符串可以更容易地操作和重用。

@cities.map { |c| @city = c; erb :cityview }.join("<p>--------</p>")

答案 1 :(得分:0)

我更喜欢:

erb:

<p><%= @city %></p>

和循环

@array.each_with_index do |e, i|
    @city = e
    erb :cityview
    puts "<p>-------</p>" if i < @array.length - 1
end

我认为你已经拆分了erb,因为你想自定义它。

答案 2 :(得分:0)

如果您想将HTML与您的城市名称混合使用,那么在混合HTML之前,您需要担心HTML编码问题。仅使用标准库:

require 'cgi'
html = @cities.map { |c| CGI.escapeHTML(c) }.join('<p>-----</p>')

如果您使用的是Rails,则可以使用ERB::Util中的html_escape并使用html_safe将结果标记为HTML格式,以避免担心编码你的观点:

include ERB::Util
html = @cities.map { |c| html_escape(c) }.join('<p>-----</p>').html_safe

答案 3 :(得分:0)

更简单的解决方案是使用间隔模板。

http://guides.rubyonrails.org/layouts_and_rendering.html#spacer-templates