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.