Maybe this is an artifact of not using the proper plural of "child"? Try
"children" instead of "childs". Rails internally works a lot with building
plurals and singulars. Something could go wrong here.
Other than that it's difficult to tell because you did not show your model
definition. I'd also recommend using the built-in functions like
"role.children.build" instead of defining methods like "add_subrole" - that
may interfere with caching because "role.children" is evaluated lazily in
Rails3 while "role.children.all" makes it evaluate now. Combined with your
improper naming scheme this may be the culprit. It looks like you are
building children outside the knowledge of the relation.