Since you have {{render}} inside of a loop you have multiple instances of DetailController, one for each item. That makes controllerFor() not behaving the way you expect.
You could do it the other way around and have a selected property on your parent controller (IndexController in this case) and have your DetailController check if it’s item is the selected one, and also set it as the selected item on an edit action or similar.
In my case a singleton controller should do the trick, as I will only have one instance on screen (I wanted to isolate the code/template). So I shouldn’t pass a model basically.