Rails: как хранить произвольный порядок / ранг ассоциаций (postgres) - PullRequest
0 голосов
/ 12 июня 2018

Рельсы новичка с вопросом о хранении порядка ассоциаций.Справочная информация: я думаю о создании очень простого приложения для опросов в учебных целях.Идея состоит в том, чтобы провести несколько опросов и соответствующих вопросов.

Модели просты:

class Survey
  has_many :questions
end

class Question
  belongs_to :survey
end

Мой вопрос сейчас - где и как вы будете хранить пользовательский порядок / последовательность вопросов вопрос?Вопросы могут перемещаться, добавляться и удаляться и должны сохранять ответы из ответов на опрос.

Я думал о введении «rank_id» (внутри модели вопроса или опроса?) Или какой-то новой модели вопросника (survey has_one :question_list, has_many :questions through :question_list).Но даже с моделью question_list я не знаю, как сохранить порядок.Поиск в Google привел меня к Сохранению порядка связанных записей в Rails has_many: через ассоциацию , и он рекомендует acts_as_list gem , но для этого варианта использования это кажется слишком большим?

Заранее спасибо за любые предложения!

1 Ответ

0 голосов
/ 12 июня 2018

Лично я бы порекомендовал использовать 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) }

Если вам понадобится что-нибудь еще, позвольте мнезнаю.

...