处理soap的哈希响应的最佳方法

时间:2012-03-08 13:20:14

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

我需要从使用soap获取交付点列表的送货公司获取一些信息。我完成了我的类调用并执行soap请求,这是响应的格式:

{
:error_message=> "Code retour OK", 
:liste_point_retrait =>
[
    {
        :horaires_ouverture_dimanche => "00:00-00:00 00:00-00:00", 
        :poids_maxi => "20000", 
        :conges_partiel => false, 
        :horaires_ouverture_vendredi => "09:00-12:00 14:30-18:00", 
        :acces_personne_mobilite_reduite => false, 
        :horaires_ouverture_jeudi => "09:00-12:00 14:30-17:30", 
        :nom => "BUREAU DE POSTE SAINT LEU D ESSERENT BP"
    }, 
    {
        :horaires_ouverture_dimanche => "00:00-00:00 00:00-00:00", 
        :poids_maxi => "20000", 
        :conges_partiel => false, 
        :horaires_ouverture_vendredi => "09:00-12:00 14:00- 17:00", 
        :acces_personne_mobilite_reduite => true, 
        :horaires_ouverture_jeudi => "09:00-12:00 14:00-17:00", 
        :nom => "BUREAU DE POSTE PRECY SUR OISE BP"
    }, 
    {
        :horaires_ouverture_dimanche => "00:00-00:00 00:00-00:00", 
        :poids_maxi=> "20000",  
        :conges_partiel => false, 
        :horaires_ouverture_vendredi => "08:30-12:00 14:30-17:00",
        :acces_personne_mobilite_reduite => false, 
        :horaires_ouverture_jeudi => "08:30-12:00 14:30-17:00", 
        :nom => "BUREAU DE POSTE SAINT MAXIMIN BP"
    }
], 
:error_code=> "0", 
:qualite_reponse=> "1", 
:ws_request_id => "01587849465dc81b5eb19996cdd5d1cae4ead7766316f12e4fbfa6e86037caae"
}

现在的问题是我不喜欢我目前获取信息的方式在我的视图中显示它,例如,如果@points包含此哈希我在我的代码中使用它:

<% @points[:liste_point_retrait].each do |point| %>
  <%= point[:nom] %>
<% end %>

有没有更好的方法来处理这种反应?我想有可能做这样的事情:

<% @points.each do |point| %>
   <%= point.name %>
<% end %>

1 个答案:

答案 0 :(得分:1)

如果您只想要:liste_point_retrait键内的数据,那么只使用该键?:

@points = @points[:liste_point_retrait]

然后你可以继续使用

来遍历它
<% @points.each do |point| %>
  <%= point[:nom] %>
<% end %>

如果您希望point.nom使用point[:nom],则可以从每个Hash元素创建OpenStruct。那就是:

@points.map! { |p| OpenStruct.new(p)

我看到你的例子中有name vs nom,我不确定这是否有意。如果是这样,您需要自己翻译所有这些密钥。