Лично я бы порекомендовал использовать acts_as_list
- это позволяет изменить порядок на одном дыхании.Здесь это не кажется излишним, скорее, правильный сценарий для него :)
Затем вы можете добавить порядок по умолчанию для модели Question
, используя: default_scope { order(:rank_id) }
.Это обеспечит получение ваших вопросов в ожидаемом порядке.
Сам гем действительно рекомендует добавлять order
непосредственно в ассоциацию:
has_many :todo_items, -> { order(position: :asc) }
По умолчанию используется столбец с именемposition
вместо rank_id
, хотя вы можете перезаписать это.В вашем случае, в модели Question
:
acts_as_list scope: :survey, column: :rank_id
И в модели Survey
:
has_many :questions, -> { order(rank_id: :asc) }
Если вам понадобится что-нибудь еще, позвольте мнезнаю.