2009-12-29 63 views
0

我绝望的情况下数组。 我把一些数据放到一个数组中,但是当我迭代数组时,一些 数组的元素似乎错过了,但缺少的元素是 显示在视图中。 我正在使用插件Rails_Authorization。 我的代码:在Ruby on Rails阵列中缺少元素

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 
     @[email protected] 
    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 

回答

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 
     @[email protected] 
    end 
    # ... 
    end 
0

你可能想尝试沿着

@tasks.reject { |task| ... } 

@tasks.delete_if { |task| ... } 
东西线