与写作方法相比,复杂的模型关系

时间:2013-07-18 01:37:39

标签: ruby-on-rails-3.2 model-associations

我正在为一个应用程序添加一个投票和业力/声誉系统(类似于这里,HN等),并决定自己创建,因为现有的宝石都没有我想要的所有功能。在处理基本功能时,我最终在模型中编写了一些非常复杂的关联,并且不确定这与编写自己的方法(或范围)以返回相同的数据相比如何。

下面的伪代码。 (用户可以在问题和答案上投票,但用户也可以通过他们发布的Q / A进行投票和投票)

User
  has_many :questions
  has_many :answers
  has_many :votes

  has_many :question_up_votes, through: :questions, source: :vote, 
            conditions: {voteable_type: :question, 'score > 0'}

  has_many :question_down_votes, through: :questions, source: :vote, 
            conditions: {voteable_type: :question, 'score < 0'}

  has_many :answer_up_votes, through: :answers, source: :vote, 
            conditions: {voteable_type: :answer, 'score > 0'}

  has_many :answer_down_votes, through: :answers, source: :vote, 
            conditions: {voteable_type: :answer, 'score < 0'}


Question
  belongs_to :user
  has_many :questions
  has_many :votes, as: :voteable


Answer
  belongs_to :user
  belongs_to :question
  has_many :votes, as: :voteable


Vote
  belongs_to :voter, class_name: "User"
  belongs_to :voteable, polymorphic: true
  belongs_to :user, through: :voteable

  attr_accessible :score, :user_id, :voteable_type, :voteable_id

具体来说,对于User模型中的四个复杂关联,在User模型或者用户模型中编写返回相同信息的某些方法(或范围)会有更好的性能,更少出错,还是有其他优势Q / A模型?

我对Rails(和编程)非常陌生,这是我的第一个Stack Overflow问题,所以很温柔。如果这个问题更适合不同的Stack属性,请告诉我。谢谢!

0 个答案:

没有答案