0

我正在尝试使用 RoR 创建以下基本结构。关键是所有用户还与学校和专业相关联。用户将根据他们的学校和专业撰写文章。链接不是排他性的:许多用户可以在许多学校之一,以及许多专业之一。但是,每个用户不能超过一所学校,也不能超过一个专业。最终,我希望能够根据以下内容显示帖子/过滤文章:

  • X 专业和 Y 学校的所有用户
  • Y学校的所有专业
  • 所有拥有 X 专业的学校

我做了一些研究,不确定这是否正确...... (仍在学习)与 has_many 相比,我应该在下面使用 has_and_belongs_to_many 吗?

桌子

major_schools #(linking the two models below)

楷模

class School < ActiveRecord::Base
  has_many :major_schools
  has_many :majors, :through => :major_schools
end

class Major < ActiveRecord::Base
  has_many :major_schools
  has_many :schools, :through => major_schools
end



@school.majors #now gives a list of all the majors this school has
@major.schools #still gives a list of all schools that have this major

我需要做的是将用户模型与上述两个结合起来:

class User < ActiveRecord::Base

  has_and_belongs_to_many :major_schools

end

而且我很卡住......如何将用户模型数据拉入上述模型?

4

2 回答 2

1

您的域模型在这里有点纠结,但它有效。

这是加载 ID 为 X 的专业和 ID 为 Y 的学校的所有用户的一种方法:

class MajorSchool < ActiveRecord::Base
   belongs_to :major
   belongs_to :school

   has_and_belongs_to_many :users
end

# Load all users from this school/major combination
MajorSchool.where(major_id: X, school_id: Y).users
于 2013-09-20T23:44:01.703 回答
1

为什么不简单地做:

class School < ActiveRecord::Base
  has_many :major_schools
  has_many :majors, :through => :major_schools
  has_many :users
end

class Major < ActiveRecord::Base
  has_many :major_schools
  has_many :schools, :through => major_schools
  has_many :users
end

class User < ActiveRecord::Base
  belongs_to :school
  belongs_to :major
end

然后你应该能够做到:

# all students of the school
@school.users

# all students of the school and major (each line should return the same results)
@school.users.where(major_id: @major.id)
@major.users.where(school_id: @school.id)
User.where(school_id: @school.id, major_id: @major.id)
于 2013-09-20T23:52:53.953 回答