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.