Then I started reading you question the first thing I thought was to first separate models (as a non- or less-destructible change) and then in a second step to separate db tables.
Concerning comments I think you should have a Comment
model that is polymorphically associated with Answer
and Question
.
So in the first step you should separate current Post
model into: Question
, Answer
, and Comment
, but keep using posts db table (so I guess default_scope in each of these models setting proper post_type value)
Second step would be (after first is tested, tested again and probably even deployed to crush test) to migrate data for each model into separate db table. That will make app design way easier, less data in a single table, etc. It shouldn't even have negative performance impact as sql query count will not change.