как насчет простого типа URL и дифференцирования с типом в таблице. Тогда вы можете иметь отношения для каждого ТИПА URL с чем-то вроде:
belongs_to :private_url, :class_name => "Profiles", :conditions => "type = 0"
belongs_to :public_url, :class_name => "Profiles", :conditions => "type = 1"
Это значительно "упростит" ваши ассоциации, которыми вы должны управлять. Это не полный ответ, я не думаю, но, возможно, если вы сможете заставить его работать, это упростит вещи настолько, что проблема, с которой вы столкнетесь, станет проще для решения.
Возможно, у меня неправильный синтаксис выше, но вы должны понять суть того, что я предлагаю ...