由于我是 Rails 新手,可能有一个简单的解决方案。但我什至无法在某个地方找到这个确切的问题。其他帖子处理破坏与删除(我都尝试了相同的结果),或者只是不提及关联对象的行为方式。
我的问题:我想通过 :through 创建一个多对多关联。当我删除一个关联(即关系对象,而不是相关对象)时,我希望在关联对象的所有模型实例中删除(更新)该关联。但这并没有完全发生。
我的例子:
Meeting < ActiveRecord::Base
has_many :participations
has_many :users, :through => :participations
User < ActiveRecord::Base
has_many :participations
has_many :meetings, :through => :participations
Participation < ActiveRecord::Base
belongs_to :meeting, :foreign_key => :meeting_id
belongs_to :user, :foreign_key => :user_id
当我创建一个新关联时,关联的对象会相应地更新:
u = User.find(...)
m = Meeting.find(...)
m.users<< u
以这种方式创建关联时也是如此:
m.participations.create(:user_id => u.id) # this requires to make the user_id attribute accessible
当我现在查看关联的用户模型实例时,它已按预期更新:
u.meetings >> contains the newly created association to the meeting m
当我销毁(而不是删除!)这个关联时,关联的对象不会像我预期的那样更新:
m.users.find_by_user_id(u.id).destroy
m.users >> []
u.meetings >> still contains the destroyed association to meeting m
我原以为 u.meetings 已更新且为空 ([])。添加验证无助于解决此问题:
Meeting < ActiveRecord::Base
validates_associated :contacts
or
Participation < ActiveRecord::Base
validates_presence_of :contact, :interview
我做错了什么或者我在这里错过了什么?
我正在使用 Rails 3.2.8
感谢所有愿意帮助我的人。