Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 如何解析这个哈希数组?_Ruby On Rails_Ruby_Arrays_Parsing_Hash - Fatal编程技术网

Ruby on rails 如何解析这个哈希数组?

Ruby on rails 如何解析这个哈希数组?,ruby-on-rails,ruby,arrays,parsing,hash,Ruby On Rails,Ruby,Arrays,Parsing,Hash,我有以下哈希数组,需要解析所有非空电子邮件: [{: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=>"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

如何正确操作?

当您在散列上说
每个带有索引的\u时,您将得到如下数组

@contacts.each_with_index do |c, i| ...
{: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]
将为您提供哈希而不是数组。

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

使用以下内容:

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? }

此时,可查看的电子邮件将只包含要显示的哈希值。您的视图只会在它们上面循环。

我希望看到编写的代码,以便在将结果传递给您的视图之前,您可以
拒绝
在控制器中选择适当的数组项。我同意@theTinMan。固定触点,使其正确,而不是在视图中进行调整,因为视图很乱。