这个模型集的关联是什么?

时间:2013-07-19 17:29:56

标签: ruby-on-rails activerecord ruby-on-rails-4

我不知道如何在几个模型之间建立这种关联。任何建议将不胜感激。共有四种型号。我在页面底部发布了一个我正在考虑的UI模型,因为一张图片值1000字。

活动

Events。活动可以是聚会或毕业典礼等等。

位置

每个活动都有很多Positions。职位是人们将被雇用的职位。如果一个活动有5个空缺职位,这意味着他们希望有5个人参加活动。

工作

每个职位可以有很多Jobs与之相关联。工作可以是做饭服务员 DJ 等等。因此,事件计划员可以指定职位(例如人)将需要完成任意数量的工作。一个职位可能需要充当服务员和厨师。另一个职位可能只是调酒师。等等。

乔布斯将成为一个查询表;活动策划者将从预先存在的工作列表中进行选择。他们无法创建自己的记录。

每份工作都有很多专业。酒保可以拥有啤酒葡萄酒 Flair 等专业。厨师可以为意大利语墨西哥

专业也将是一个查询表;活动策划者将从已有的专业列表中进行选择。他们可以选择该职位所需的任何专业。他们无法创建自己的专业记录。

结论

我尝试了几种变化,但它们并没有像我想象的那样保存。我认为Job应该has_and_belongs_to_many Positions,但我不知道应该有什么专业。查找表需要belong_to Jobs专业版,但每个职位,每个职位也需要选择它们。 如何在这些项目之间建立关联,以充分利用Rails的自动化功能?

样机UI

(它在XCode / Interface构建器中被模拟,但我向你保证,这是一个Ruby on Rails站点)

enter image description here

1 个答案:

答案 0 :(得分:1)

我只使用has_many_and_belongs_to_many而不是使用has_many :xxx, through: :join_table。这样你就可以控制JoinTable。

Event.rb

has_many :positions

Position.rb

has_many :jobs
belongs_to :event

Job.rb

has_many :specialities, through: "JobSpecialties"
has_many :position_jobs
# belongs_to :position -- no longer needed

Specialty.rb

has_many :jobs, through: "JobSpecialites

JobSpecialty.rb

belongs_to :specialties
belongs_to :jobs

PositionJob.rb

belongs_to :position
belongs_to :job
has_many :specialties, through: :position_job_specialties

PositionJobSpecialty.rb

belongs_to :position_job
belongs_to :speciality

您需要创建某种验证,以确保您选择的专业与PositionJob.rb中属于所选作业的专业相对应

编辑:在仔细阅读规范后添加了更多课程。