2

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

伪代码如下。(用户可以对问题和答案进行投票,但用户也可以通过他们发布的 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/一个模型?

我对 Rails(和编程)非常陌生,这是我的第一个 Stack Overflow 问题,非常感谢您的温柔。让我知道这个问题是否更适合不同的 Stack 属性。谢谢!

4

0 回答 0