我在创建一个可以显示最便宜价格的循环时遇到一些问题。
这是我的控制器:
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循环中?
答案 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]