我有一个Quiz
,它有很多Question
个。我希望能够在测验中更改这些问题的顺序。但我不想使用诸如acts_as_list
之类的宝石,因为那时我必须将位置列存储在Question
类中。在我看来,它不属于那里;只有Quiz
应该知道其问题的顺序。所以,我想在questions_order
中有一个Quiz
列,其中包含该信息。
因为我需要在其他地方使用此模式,所以我想将该功能提取到扩展中。所以,这个扩展看起来像这样:
class Quiz < ActiveRecord::Base
has_many :questions, dependent: :destroy
orders :questions
end
这会扩展到这样的事情:
class Quiz < ActiveRecord::Base
has_many :questions, dependent: :destroy,
after_add: :add_question_order,
after_remove: :remove_question_order do
def ordered
# query for ordering questions
end
end
end
但是,这意味着orders
方法需要扩展已定义的has_many :questions
关联。有可能吗?
答案 0 :(得分:0)
您可以尝试这样的事情:
class Quiz < ActiveRecord::Base
has_many :questions, dependent: :destroy,
after_add: :add_question_order,
after_remove: :remove_question_order
serialize :questions_order, Array
def add_question_order(question)
update_attribute(:questions_order, questions_order << question.id)
end
def remove_question_order(question)
update_attribute(:questions_order, questions_order.delete(question.id))
end
end