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 : ["myemail@first.com,My Name", "myemail@second.com,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

Felipe Pieretti Umpierre 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 : ["myemail@first.com,My Name", "myemail@second.com,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. [ 'myemail@second.com', 'My Name' ])

<% @a.each do |a| %>     <%= a %><br /> <% end %>

return :

myemail@second.com My Name

End of line....

Felipe Pieretti Umpierre 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] %><br />

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

<% end %>

return :

myemail@second.com My Name

Thank you.

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

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

["myemail@first.com,My Name"] ["myemail@second.com,My Name 2"]

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

Thank you

Felipe Pieretti Umpierre 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:

"myemail@first.com,My Name"; "myemail@second.com,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: [ "myemail@first.com,My Name", "myemail@second.com,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: [ { "myemail@first.com": "My Name" }, { "myemail@second.com", "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.