我的哈希标记有编号的问题(the keys)
,还有五个可能的答案(the values)
questions = {
likert_1: %w(choice_5mMP0CMR9tC choice_6kUil9z7wi4 choice_6ZQQ7c2KR3O choice_6ilb652FCqZ choice_6Z3NYElYPPM),
likert_2: %w(choice_5pjBFzoqqpc choice_6AARUgqxvGL choice_5lnoEM7GUYr choice_5inpB7UT9Bs choice_6N6ETdSVpFP)
}
数据库按用户保存,每个问题一个值。因此,数据库可以具有每个likert_#
一个值的任意组合。 但是!数据库不会按照答案的顺序保存它们。
因此,我试图找到一种优雅的方式,根据likert_1
likert_2
排序任何给定的两个回复
所以,如果我有:[choice_5pjBFzoqqpc choice_5mMP0CMR9tC]
。然后,它们应按以下方式退回:[choice_5mMP0CMR9tC, choice_5pjBFzoqqpc]
,因为choice_5mMP0CMR9tC
中显示likert_1
而choice_5pjBFzoqqpc
中显示likert_2
。
答案 0 :(得分:1)
正如我也指出的那样,在查询中进行排序而不是之后检索答案可能会更有效,更优雅。由于您有Answer
和(可能)Question
表,以及Answer
和Question
之间的关系,您只需在查询中的所需Question
属性上订购使用ORDER BY。
说完了;既然您询问了如何根据提供的Array
中的问题顺序排序Hash
包含答案,而且还没有人回答,我会回答这个问题。
这里的简单想法是找到包含答案作为其中一个选项的问题的索引,并将该索引用作sort_by
属性。您可以通过以下方式执行此操作:
answers = ["choice_5pjBFzoqqpc", "choice_5mMP0CMR9tC"]
question_choices = questions.values
sorted = answers.sort_by { |a| question_choices.find_index { |c| c.include? a } }
# ["choice_5mMP0CMR9tC", "choice_5pjBFzoqqpc"]