Ответить на часть о маршрутах и поиске ресурса.
Обычный контроллер rails найдет дочерний ресурс от родителя.
GET /articles/{parent_id}/comments/{id}
GET /articles/0/comments/1
article = articles.find(parent_id = 0)
comment = article.comments.find(id = 1)
Вы не можете сделать это с полиморфными родителями. Вам нужно будет найти родителя от ребенка.
GET /article/{parent_id}/comments/{id}
GET /questions/{parent_id}/comments/{id}
GET /article/0/comments/1
GET /questions/0/comments/1
parent = comments.select(parent_id = 0).parent
comment = parent.comments.find(id = 1)
Возможно, ваши маршруты могут передать тип контроллеру.
GET /{parent_type}/{parent_id}/comments/{id}
GET /article/0/comments/1
GET /questions/0/comments/1
parent = parent_type.find(parent_id = 0)
comment = parent.comments.find(id = 1)
(Я не пробовал этот подход, это явно псевдокод.)
Редактировать ...
Полагаю, вы также можете просто добавить один параметр для каждого типа родителя.
GET /article/{article_id}/comments/{id}
GET /questions/{question_id}/comments/{id}
GET /article/0/comments/1
GET /questions/0/comments/1
if article_id
article = articles.find(article_id = 0)
comment = article.comments.find(id = 1)
if question_id
question = questions.find(question_id = 0)
comment = question.comments.find(id = 1)