【发布时间】:2014-02-20 23:55:49
【问题描述】:
我有 5 个模型:用户、关键字、问题、关联和问题状态。
- User 和 Keyword 是通过关联关联的(相同的关键字可以是 由多个用户添加,反之亦然)
- 关键字和问题通过 has_many belongs_to 相关联(关键字 可以有很多问题,一个问题属于一个关键字)
- User 和 Question 由 question_status 关联(用户可以标记 已回答、已删除等问题)
所以关系是:
- 一个用户通过关联有很多关键字
- 一个关键字通过关联有很多用户
- 关键字有很多问题
- 问题属于关键字
- 用户可以通过 question_status 为许多问题设置状态
- 一个问题可以由多个用户通过 question_status 分配状态
我必须构建 5 个模型,因为多个用户可以添加相同的关键字。因此,我必须将用户和关键字彼此分开,并通过关联将它们关联起来。多个用户在同一个问题上也可以有不同的标签(已回答、已删除、已归档等)。所以我必须与问题表分开维护这个状态。
模型是 -
class User < ActiveRecord::Base
has_many :associations, dependent: :destroy
has_many :keywords, :through => :associations
has_many :question_statuses, dependent: :destroy
has_many :questions, :through => :question_statuses
class Keyword < ActiveRecord::Base
has_many :questions, dependent: :destroy
has_many :associations, dependent: :destroy
has_many :users, :through => :associations
class Question < ActiveRecord::Base
belongs_to :keyword
has_many :question_statuses, dependent: :destroy
has_many :users, :through => :question_statuses
class Association < ActiveRecord::Base
belongs_to :keyword
belongs_to :user
class QuestionStatus < ActiveRecord::Base
belongs_to :question
belongs_to :user
我需要在 ActiveRecord 中创建一个 JOIN 查询,该查询将为用户(例如 users.id = 2)针对用户在其帐户中添加的关键字提供问题,不包括已删除或回答的问题,例如在 question_statuses 表中已删除 = t 或已回答 = t。
仅当用户标记问题时,才会将记录添加到 question_statuses。否则, question_statuses 将没有该用户的任何记录。
我们将不胜感激。
【问题讨论】:
-
您提到已删除 = t 并已回答 = t。那些是 Rails 中的布尔字段吗?如果您使用显式文本字段而不是布尔字段,我建议您切换到使用布尔字段,以便 Rails 了解您打算在其中存储的信息类型。
-
它们是布尔字段。
标签: ruby-on-rails activerecord join associations