Rails:如何存储自定义顺序/关联排名(postgres)

时间:2018-06-12 08:39:08

标签: ruby-on-rails ruby postgresql activerecord rails-activerecord

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,但这对于这个用例来说似乎太过分了?

提前感谢任何建议!

1 个答案:

答案 0 :(得分:1)

就个人而言,我建议使用acts_as_list - 这使得重新排序变得轻而易举。它在这里看起来似乎有些过分,而不是它的正确场景:)

然后,您可以使用Questiondefault_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) }

如果您需要,请尽快扩展其中任何一项 - 请告诉我。