Each returns just last array

Hello, I was testing a only string, and split it to get a array, I make
a .each, but when I put to insert, it just insert the last index.

emails_controller.rb

emails = params[ :email ][ :email ].split( “;” )
@e = emails

action
<%= @e %>

return : [“[email protected],My Name”, “[email protected],My Name”]

emails_controller.rb

emails.each do |e|

  for_each_one = e.split( "," )

  @a = for_each_one

  #@email.name = for_each_one[ 0 ]
  #@email.email = for_each_one[ 1 ]
  #@email.save
  #
  #if @email.valid?
  #  @group.emails << @email
  #end

end

action

<% @a.each do |a| %>
<%= a %>

<% end %>

return :

[email protected]
My Name

Thank you.

Felipe Pieretti U. wrote in post #1046832:

Hello, I was testing a only string, and split it to get a array, I make
a .each, but when I put to insert, it just insert the last index.

As far as I can tell it’s doing exactly what you asked it to do:

Let me explain…

emails_controller.rb

emails = params[ :email ][ :email ].split( “;” )
@e = emails

action
<%= @e %>

return : [“[email protected],My Name”, “[email protected],My Name”]

Your array with two elements…

emails_controller.rb

Enumerate each of the two elements…

emails.each do |e|
for_each_one = e.split( “,” )

  @a = for_each_one
  1. First time through set @a to a new array containing the split of the
    first element
  2. Second time through replace @a with new array containing the split of
    the second element
  #@email.name = for_each_one[ 0 ]
  #@email.email = for_each_one[ 1 ]
  #@email.save
  #
  #if @email.valid?
  #  @group.emails << @email
  #end

end

action

Enumerate the two elements contained in @a (i.e. [ ‘[email protected]’,
‘My Name’ ])

<% @a.each do |a| %>
<%= a %>

<% end %>

return :

[email protected]
My Name

End of line…

Felipe Pieretti U. wrote in post #1046832:

Maybe you wanted…

emails_controller.rb

@a = []

emails.each do |e|

  for_each_one = e.split( "," )
     @a << for_each_one

Append split array to @a array. (i.e. an array of arrays).

  #@email.name = for_each_one[ 0 ]
  #@email.email = for_each_one[ 1 ]
  #@email.save
  #
  #if @email.valid?
  #  @group.emails << @email
  #end

end

action

<% @a.each do |a| %>
<%= a[0], a[1] %>

The .each here would yield the two arrays contained within the outer
array.

<% end %>

return :

[email protected]
My Name

Thank you.

I’m not sure if that’s exactly what you wanted, but should point you in
the right direction.

Felipe Pieretti U. wrote in post #1046904:

Hello, what I want to do, the user gonna insert a string with right
combinations.

So, the user gonna put, the email[comma]name[semincolon]

This way, I need to split the semicolon, to have the array of strings,
after I need to split the comma, to have the name in a index, and the
email in another.

Okay, I thought my earlier explanation would be sufficient to help you
achieve your goal, but I’ll try to explain further:

You are starting with this:

[email protected],My Name”; “[email protected],My Name”

I can’t guess what you want in your final result. There are multiple
ways to split and store this. So I’ll explain what I would do in this
case, assuming I want to keep all the information in the original
string:

Start by splitting the string at the semicolons:

arr1 = params[ :email ][ :email ].split( “;” )

Result:

[ “[email protected],My Name”, “[email protected],My Name” ]

Declare an array to store the final data

emails = []

Enumerate the array we split

arr1.each do |str|

For each string in arr1 split at the comma

arr2 = str.split(",")

Put the address and name in a hash (keyed by email address in this

case)
h[arr2[0]] = arr2[1]

Append the hash to the final array

emails << h
end

Final result:

[ { “[email protected]”: “My Name” }, { “[email protected]”, “My Name”
} ]

There might be some shortcut to the above procedure, but I wanted to
show all the individual steps to be clear what’s happening.

As I said before, this is only one possible way to store the results
keeping all the original data. You’ll have to decide what is best for
your particular case.

Hello, what I want to do, the user gonna insert a string with right
combinations.

So, the user gonna put, the email[comma]name[semincolon]

This way, I need to split the semicolon, to have the array of strings,
after I need to split the comma, to have the name in a index, and the
email in another.

emails = params[ :email ][ :email ].split( “;” )
array = []

emails.each do |e|

  foreach = e.split( ";" )
  array << foreach

  @a = array

end

[“[email protected],My Name”]
[“[email protected],My Name 2”]

But I can’t access the index to split the comma.

Thank you

This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.

| Privacy Policy | Terms of Service | Remote Ruby Jobs