Rails新手有关于存储关联顺序的问题。背景是我正在考虑为学习目的构建一个超级简单的调查应用程序。我们的想法是进行多项调查和相应的问题。
模型很简单:
class Survey
has_many :questions
end
class Question
belongs_to :survey
end
我现在的问题 - 你在哪里以及如何在调查中存储问题的自定义顺序/顺序?问题可能会移动,添加和删除,并应保留调查回复的答案。
我在考虑引入“rank_id”(在问题或调查模型中?),或某种新的question_list模型(survey has_one :question_list, has_many :questions through :question_list
)。但即使使用question_list模型,我也不知道如何保留订单。谷歌搜索引导我Saving the order of associated records in a Rails has_many :through association
并推荐acts_as_list gem,但这对于这个用例来说似乎太过分了?
提前感谢任何建议!
答案 0 :(得分:1)
就个人而言,我建议使用acts_as_list
- 这使得重新排序变得轻而易举。它在这里看起来似乎有些过分,而不是它的正确场景:)
然后,您可以使用Question
向default_scope { order(:rank_id) }
模型添加默认订单。这将确保按照预期的顺序检索您的问题。
gem本身实际上建议将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) }
如果您需要,请尽快扩展其中任何一项 - 请告诉我。