Passing Arrays in recursive functions.

ok, I'm still new to ruby and new to rails. what I have is a task
database that acts_as_tree a task can have a children an those
children are full tasks so they can have children of their own, Tasks
can only be completed if they have no children, a task with children
is only completed if all its children are done. this much I have
working, I'm trying to add some Ajax support for toggling the done/
not_done flag on the view but I'm hitting a problem and I'm not sure
how to get around it.
[model]
  def completed?
    self.siblings.all? { |x| x.done } if self.parent
  end

[controller]
def task_done
   @task = Task.find(params[:id])
   is_complete = !@task.done
   ids_changed = task_complete!(@task, is_complete)
   words = is_complete ? " " : " Not "
   flash[:notice] = "Task is#{words}finished"
    if request.xhr? then
      render :update do |page|
        ids_changed.each {|x|
          page.toggle "td_#{x}"
          page.toggle "menu_#{x}_done"
          }
      end
    else
      redirect_to_index
    end
end

  def task_complete!(taskid, is_complete=true, ids_changed = [])
    @task = Task.find(taskid)
    val = is_complete ? 1 : 0
    @task.update_attribute(:done, val)
    ids_changed.insert(-1,@task.id)
    if @task.completed?
      task_complete!(@task.parent, is_complete, ids_changed)
    end
  end

what I have thought about is changing task_complete! to pass an array
back an forth but am unsure how to get each call to insert a new
element into the array and since this happens in a place I don't know
how to hack away at I'm at a bit of a loss. any suggestions/advice is
appreciated.

found the solution on my own, I uh forgot to return the array after
the call

def task_done
   @task = Task.find(params[:id])
   is_complete = !@task.done
   ids_changed = task_complete!(@task, is_complete)
   words = is_complete ? " " : " Not "
   flash[:notice] = "Task is#{words}finished"
    if request.xhr? then
      render :update do |page|
        ids_changed.each {|x|
          page.toggle "td_#{x}"
          }
          page.toggle "menu_#{params[:id]}_done"
      end
    else
      redirect_to_index
    end
end

  def task_complete!(taskid, is_complete=true, ids_changed = [])
    @task = Task.find(taskid)
    val = is_complete ? 1 : 0
    @task.update_attribute(:done, val)
    ids_changed.insert(-1,@task.id)
    if @task.completed?
      task_complete!(@task.parent, is_complete, ids_changed)
    end
    ids_changed
  end