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 rubyonrails-talk-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe@googlegroups.com. For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en.
On Dec 29, 2:21 pm, LeonS <leonard.stellbr...-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> 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> 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? > -9zzyKlPin31d8Qaj68W1iA@public.gmane.org(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 rubyonrails-talk-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe@googlegroups.com. For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en.
Frederick Cheung wrote:> On Dec 29, 2:21�pm, LeonS <leonard.stellbr...-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> 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. -- Posted via http://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 rubyonrails-talk-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe@googlegroups.com. For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en.
On Dec 29, 5:33 pm, Robert Walker <li...-fsXkhYbjdPsEEoCn2XhGlw@public.gmane.org> 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 rubyonrails-talk-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe@googlegroups.com. For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en.