-2

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

[{: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

怎么做才对?

4

3 回答 3

1

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

使用以下内容:

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将只包含要显示的哈希值。您的视图只会遍历它们。

于 2013-10-04T00:57:30.600 回答
0
@contacts.each_with_index do |c, i| ...
于 2013-10-04T00:38:02.070 回答
0

当您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]将为您提供散列而不是数组。

于 2013-10-04T00:38:31.687 回答