设置与三个模型的数据库关联

时间:2014-05-16 15:08:49

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

好吧,我正在尝试在用户模型中设置我的关联以及我的表中的列。

我有三个模型,UserPositionGroup

user.rb

belongs_to :position
belongs_to :group

group.rb

has_many :positions
has_many :users, through: :positions

position.rb

belongs_to :group
has_many :users

基本上,每个用户都属于一个位置和一个组。每个职位都属于一个群体。因此,我可以通过user.position轻松找到用户的位置,并按user.position.group找到他们的分组。

在数据库中,Position表格有group_id列,User表格有position_idgroup_id列。

这些关联的目标是:如果我将某个用户的positionposition_id)更改为某个内容,则应自动更改该用户groupgroup_id)到该关联组。现在,如果我更改了用户position,我可以通过user.position.group找到他们的组。但是,我更愿意将其设为我可以拨打user.group的地方,这意味着用户group_id必须在我更改Position时进行更改。 '

如果有人能够以最好的最好的的方式阐明这一点,以及背后的逻辑和推理,那么我们将非常感激。 The Rails Guides帮助了当前状态的关联,但我知道我错过了像index这样的东西。谢谢。

1 个答案:

答案 0 :(得分:0)

将它放在你的user.rb模型中:

after_update :set_group_id

# At the bottom of user.rb

private
  def set_group_id
    self.update(group_id: position.group.id)
  end

基本上,每次更新用户时,它都会更新group_id以匹配用户的位置组ID。 (我也同意上面的评论,这个数据库结构是循环的,我会提醒你不要这样做。)