好吧,我正在尝试在用户模型中设置我的关联以及我的表中的列。
我有三个模型,User
,Position
和Group
。
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_id
和group_id
列。
这些关联的目标是:如果我将某个用户的position
(position_id
)更改为某个内容,则应自动更改该用户group
(group_id
)到该关联组。现在,如果我更改了用户position
,我可以通过user.position.group
找到他们的新组。但是,我更愿意将其设为我可以拨打user.group
的地方,这意味着用户group_id
必须在我更改Position
时进行更改。
'
如果有人能够以最好的最好的的方式阐明这一点,以及背后的逻辑和推理,那么我们将非常感激。 The Rails Guides帮助了当前状态的关联,但我知道我错过了像index
这样的东西。谢谢。
答案 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。 (我也同意上面的评论,这个数据库结构是循环的,我会提醒你不要这样做。)