【问题标题】:How do I parse this array of hashes?如何解析这个哈希数组?
【发布时间】:2013-10-10 20:47:08
【问题描述】:

我有以下哈希数组,我需要解析所有不为空的电子邮件:

[{:id=>"something", :first_name=>"First", :last_name=>"Name", :name=>"First Name", :email=>"first_name@gmail.com", :gender=>nil, :birthday=>nil, :profile_picture=>nil, :relation=>nil}, 
{...},
{}]

我正在尝试这样做:

- @contacts[0].each_with_index do |c, i|
  - unless c[:email].blank?
    %tr
      %td= c[:email]
      %td= check_box_tag "email_to[]", c[:email], true

但我收到错误:

An ActionView::Template::Error occurred in users#parse_data:

  no implicit conversion of Symbol into Integer

怎么做才对?

【问题讨论】:

  • 在将结果传递给视图之前,我更希望看到编写的代码,以便您在控制器中使用 rejectselect 适当的数组条目。
  • 我同意@theTinMan。修复联系人以使其正确,而不是在视图中进行调整,这很混乱。

标签: ruby-on-rails ruby arrays parsing hash


【解决方案1】:
@contacts.each_with_index do |c, i| ...

【讨论】:

    【解决方案2】:

    当您在哈希上说each_with_index 时,您将得到一个如下所示的数组

    {:id=>"something", :first_name=>"First", :last_name=>"Name"}.each_with_index{|e,i| p e}
    [:id, "something"]
    [:first_name, "First"]
    [:last_name, "Name"]
    

    所以,你不能说e[:id],这就是错误的原因。如上所述,@contacts[0] 会给你哈希而不是数组。

    【讨论】:

      【解决方案3】:

      在你的视图中做大量的处理不是好的设计。有简单的条件和循环是可以理解的,但是在控制器中应该进行繁重的处理。

      按照这些思路使用一些东西:

      ary = [
        {:id=>"something", :first_name=>"First", :last_name=>"Name", :name=>"First Name", :email=>"first_name@gmail.com", :gender=>nil, :birthday=>nil, :profile_picture=>nil, :relation=>nil}, 
        {:id=>"something", :first_name=>"First", :last_name=>"Name", :name=>"First Name", :email=>"", :gender=>nil, :birthday=>nil, :profile_picture=>nil, :relation=>nil}, 
        {}
      ]
      
      viewable_email = ary.reject{ |e| e.empty? || e['email'].empty? }
      

      此时viewable_email 将只包含要显示的哈希值。你的视图只会循环它们。

      【讨论】:

        猜你喜欢
        • 2012-04-07
        • 2012-07-13
        • 2018-03-12
        • 2016-09-23
        • 1970-01-01
        • 1970-01-01
        • 2022-01-10
        • 1970-01-01
        • 2017-02-19
        相关资源
        最近更新 更多