Missed elements in array

Hi,
i despair in case of an array.
I’ll take some data into an array, but when i iterate the array some
elements of the array seems to be missed, but the missing element are
displayed in the view.
I’m using the Plugin Rails_Authorization.

my Code:

def index
if !params[:task_id] #Tasks der 1. ebene anzeigen, auf die der
User zugriff hat
@tasks = current_user.is_owner_of_what +
current_user.is_moderator_of_what + current_user.is_user_of_what
@tasks.uniq! #doppelte Einträge auf einen reduzieren
puts @tasks
@tasks.each do |task|
puts task.id
if !task.root? #ist Task kein wurzelelement?
if (current_user.has_roles_for? Task.find(task.parent_id) )
#Hat der Benutzer Rechte auf Parent Task?
@tasks.delete(task) #Objekt aus Array schmeißen da nur
die Elemente der 1. Ebene dargestellt werden sollen, auf die der
Benutzer Rechte hat

      end
    end
  end
else #Wenn Subtasks angezeigt werden sollen
  @task=Task.find(params[:task_id])
  load_subtasks
  @tasks=@subtasks
end
#@tasks = Task.all
respond_to do |format|

  format.html #index.html.erb
  format.xml  { render :xml => @tasks }
end

end

And My Debugging Log:

#Task:0x1036e6ca8
#Task:0x1036e3ee0
#Task:0x1036df958
#Task:0x1036dc190
#Task:0x1036d8ea0
#Task:0x1036d5138
#Task:0x1036d18f8
#Task:0x1036cbd90
5
6
8
12
14

You received this message because you are subscribed to the Google
Groups “Ruby on Rails: Talk” group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to
[email protected].
For more options, visit this group at
http://groups.google.com/group/rubyonrails-talk?hl=en.

On Dec 29, 2:21 pm, LeonS [email protected] wrote:

Hi,
i despair in case of an array.
I’ll take some data into an array, but when i iterate the array some
elements of the array seems to be missed, but the missing element are
displayed in the view.
I’m using the Plugin Rails_Authorization.

You’re deleting from the array as you are iterating over it - don’t do
that.

Fred

    puts task.id
else #Wenn Subtasks angezeigt werden sollen

end
#Task:0x1036cbd90
5
6
8
12
14

You received this message because you are subscribed to the Google
Groups “Ruby on Rails: Talk” group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to
[email protected].
For more options, visit this group at
http://groups.google.com/group/rubyonrails-talk?hl=en.

Frederick C. wrote:

On Dec 29, 2:21�pm, LeonS [email protected] wrote:

Hi,
i despair in case of an array.
I’ll take some data into an array, but when i iterate the array some
elements of the array seems to be missed, but the missing element are
displayed in the view.
I’m using the Plugin Rails_Authorization.

You’re deleting from the array as you are iterating over it - don’t do
that.

Yep. A common mistake when iterating arrays. One solution is to build a
new array containing the objects you want, rather than deleting objects
that you don’t want. There may be better approaches that might use less
memory though.

On Dec 29, 5:33 pm, Robert W. [email protected] wrote:

Yep. A common mistake when iterating arrays. One solution is to build a
new array containing the objects you want, rather than deleting objects
that you don’t want. There may be better approaches that might use less
memory though.

And if you do want to do that, a rubyish way of doing that is to use
methods like select

The relevant portion of the code above could be written as

@tasks = @tasks.select {|task| task.root? || !
current_user.has_roles_for?(Task.find(task.parent_id))}

(probably a little faster too - Array#delete is O(n))

Fred


Posted viahttp://www.ruby-forum.com/.

You received this message because you are subscribed to the Google
Groups “Ruby on Rails: Talk” group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to
[email protected].
For more options, visit this group at
http://groups.google.com/group/rubyonrails-talk?hl=en.