我对数组感到绝望。 我把一些数据放到一个数组中,但是当我迭代一些数组时 似乎错过了数组的元素,但缺少的元素是 显示在视图中。 我正在使用Plugin Rails_Authorization。 我的代码:
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
我的调试日志:
#<Task:0x1036e6ca8>
#<Task:0x1036e3ee0>
#<Task:0x1036df958>
#<Task:0x1036dc190>
#<Task:0x1036d8ea0>
#<Task:0x1036d5138>
#<Task:0x1036d18f8>
#<Task:0x1036cbd90>
5
6
8
12
14
答案 0 :(得分:3)
尝试使用更简洁的#reject!
语法,因为#delete
调用听起来可能会导致问题。
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.reject! do |task|
!task.root? && current_user.has_roles_for?(Task.find(task.parent_id))
end
else #Wenn Subtasks angezeigt werden sollen
@task=Task.find(params[:task_id])
load_subtasks
@tasks=@subtasks
end
# ...
end
答案 1 :(得分:0)
你可能想尝试一下
@tasks.reject { |task| ... }
或
@tasks.delete_if { |task| ... }