Ruby 意外的哈希输出

Ruby 意外的哈希输出,ruby,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 Stand

我通过一个循环创建了一个哈希,如下所示

   <% 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.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入门页上,我感到困惑的原因是。我没有得到我期望的输出
在代码生成哈希后,我正在运行来自better_错误的命令

我一定错过了什么,这是基本的和意想不到的。。。请随意建议其他标题,以帮助未来的混乱

更新

听起来好像live shell不是运行这些命令的地方,因为它只返回散列本身。实际上,我试图用散列的键和值填充f.select字段。不要对问题进行太多更改,但如何填充选择字段的选项,使其相邻显示键和值?

如果进入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是
每个
语句的返回值,它只是散列本身

您要做的是这样的:

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

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

我不确定更好的\u错误和绑定\u调用方gem在哪里适合IRB和rails c,但在这个活动shell中,当我发送\u散列时,我得到的输出都是是我发布的。尝试进入控制台中的任意文件夹(不是通过live shell),键入irb,然后再次键入这些命令。我明白了。因此,live shell不是一个测试哈希输出结果的地方。这就是它看起来的样子,对吗?我只看到散列本身被返回是的,似乎better_errors gem不显示打印语句。我标记了正确的答案,如果您不介意看一下的话,我还有一个剩余的答案,但很高兴知道better_errors负责。我快疯了!
<ul>
<% ship_hash.each do |key, value| %>
  <li><%= key %>: <%= value %></li>
<% end %>
</ul>