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.