如何在不重复自己的情况下有效地循环许多价格?

时间:2011-11-01 15:36:59

标签: ruby-on-rails ruby ruby-on-rails-3

我在创建一个可以显示最便宜价格的循环时遇到一些问题。

这是我的控制器:

   def domain
    country_codes = ['.dk', '.com', '.eu', '.net', '.org', '.biz', '.info', '.nu', '.name', '.se', '.fi', '.net', '.de', '.it'] # etc. could move this to a config if needed
    @domain = params[:domain]
    @results = {}
    country_codes.each do |cc|
    @results[cc] = Whois.whois(@domain + cc)
    end
    @pricedk = Domain.sort("dk ASC").first
    @pricecom = Domain.sort("com ASC").first
    @priceorg = Domain.sort("org ASC").first
    @pricenet = Domain.sort("net ASC").first
    #ETC... 
end

我的观点:

<table border="0" bordercolor="#FFCC00" width="700" cellpadding="0" cellspacing="0">
    <tr class="top">
        <td class="checkdomain"></td>
        <td>Name</td>
        <td>Domain</td>
        <td style="font-size:9px;"></td>
    </tr>
     <% @results.each_pair do |country_code, available| %>
    <% klass = available.registered? ? "pinfo" : "info" %>
    <tr>
        <td><span class="<%= klass %>"></span></td>
        <td><%= @domain + country_code %></td>
        <td>PRICE HERE</td>

    </tr>
     <% end %>
</table>

我想干掉@pricecom,@ pricedk,@ priceorg。 如何将它包含在@results循环中?

1 个答案:

答案 0 :(得分:4)

如果你有这样的重复,有许多不同的实例变量,你需要做的就是将它们全部卷入一个哈希的实例变量中:

def domain
  country_codes = %w[ dk com eu net org biz info nu name se fi net de it ]

  @domain = params[:domain]

  @results = { }
  @prices = { }

  country_codes.each do |cc|
    @results[cc] = Whois.whois("#{@domain}.#{cc}")
    @prices[cc.to_sym] = Domain.sort(cc).first
  end
end

你会经常看到这种模式。 @pricesdk变为@prices[:dk]