我正在制作Q& A网站。我现在有三种型号:
Question
Answer
User
问题和答案都可以投票,因此我需要一种方法来存储投票给模型的人,以防止同一用户对一个模型进行多次投票。
创建投票模型会是一个好主意吗?其中,question_id或answer_id在每个中都是空的。我担心这会造成大量垃圾并减慢应用程序的速度。
我的另一个想法是将user_id存储在Answer和Question中的哈希值中。 如果用户已经存在于哈希中,则会阻止投票。或者将答案和问题ID存储在用户中。
Rails4快速的方法是什么,但在模型中存储大多数用户交互。什么可以是KISS,DRY和快速?
答案 0 :(得分:1)
如果您有Vote
可以参考的多个模型,则应使用polymorphic模型。
class Vote < ActiveRecord::Base
belongs_to :voteable, polymorphic: true
end
class Question < ActiveRecord::Base
has_many :votes, as: :voteable
end
class Answer < ActiveRecord::Base
has_many :votes, as: :voteable
end
如果你在关联上使用索引,我认为你不必担心速度很长一段时间。只需将此代码段放入迁移中,您就可以开始使用了!
add_index :votes, [:voteable_name, :voteable_id]