意外的哈希输出

时间:2014-05-28 03:28:57

标签: ruby

我通过一个看起来像这样的循环创建了一个哈希。

   <% ship_hash = {} %>
     <% @order_preview.fedex_rates.each do |rate| %>
        <% if rate.service_name == "FedEx Ground Home Delivery" || rate.service_name == "FedEx 2 Day" || rate.service_name == "FedEx Standard Overnight" %>
        <% ship_hash["#{rate.service_name}"] = "#{number_to_currency(rate.price.to_f / 100)}" %>
       <% end %>
     <% end %>
   <% @order_preview.usps_rates.each do |rate| %>
        <% if rate.service_name == "USPS Priority Mail 1-Day" %>
          <% ship_hash["#{rate.service_name}"] = "#{number_to_currency(rate.price.to_f / 100)}" %>
        <% end %>
    <% end %>

我想做的很简单。我希望通过一个块获得键和值的输出。

  >> ship_hash
  => {"FedEx Ground Home Delivery"=>"$9.78", "FedEx 2 Day"=>"$20.59", "FedEx Standard Overnight"=>"$33.78", "USPS Priority Mail 1-Day"=>"$5.60"}

好的,这就是我所期待的......

  >> ship_hash.each { |key, value| puts "#{key}:  #{value}" }

我得到了

  => {"FedEx Ground Home Delivery"=>"$9.78", "FedEx 2 Day"=>"$20.59", "FedEx Standard Overnight"=>"$33.78", "USPS Priority Mail 1-Day"=>"$5.60"}

当我以为我会得到这样的东西时

FedEx Ground Home Delivery: $9.78...

在RubyMonk入门页面上here是我困惑的原因。我没有得到我期望的输出!!
我在&lt;%= raise%&gt;之后运行better_errors中的命令在代码生成哈希之后。

我必须遗漏一些东西,这是基本的和意想不到的......随意建议替代标题,以帮助未来的混乱......

更新

听起来好像活动shell不是运行这些命令的地方,因为它只返回散列本身。我在实践中尝试做的是使用哈希的键和值来填充f.select字段。不要过多地改变这个问题,但是我如何填充选择字段的选项,以便显示彼此旁边的键和值?

1 个答案:

答案 0 :(得分:1)

如果你进入irb(或rails控制台)并键入以下内容:

ship_hash = {"FedEx Ground Home Delivery"=>"$9.78", "FedEx 2 Day"=>"$20.59", "FedEx Standard Overnight"=>"$33.78", "USPS Priority Mail 1-Day"=>"$5.60"}
ship_hash.each { |key, value| puts "#{key}:  #{value}" }

您将看到以下输出:

FedEx Ground Home Delivery: $9.78
FedEx 2 Day: $20.59
FedEx Standard Overnight: $33.78
USPS Priority Mail 1-Day: $5.60
=> {"FedEx Ground Home Delivery"=>"$9.78", "FedEx 2 Day"=>"$20.59", "FedEx Standard Overnight"=>"$33.78", "USPS Priority Mail 1-Day"=>"$5.60"}

正在发生的事情是ruby正在向控制台打印预期的输出,然后将散列本身作为返回值返回。

因此,您应该在rails日志中看到预期的输出。但是,显示的html是each语句的返回值,它只是哈希本身。

你想要做的是这样的事情:

<ul>
<% ship_hash.each do |key, value| %>
  <li><%= key %>: <%= value %></li>
<% end %>
</ul>

这将以无序列表的形式输出散列的键值对。