我有:
user.rb
has_and_belongs_to_many :groups
has_and_belongs_to_many :posts
group.rb
has_and_belongs_to_many :users
has_many :posts, dependent: :destroy
post.rb
belongs_to :group
has_and_belongs_to_many :users
当用户点击"删除组" app删除Group和User之间的关联,如果没有其他人使用此组,则销毁它:
def destroy
@group = Group.find(params[:id])
remove_group_from_user(@group)
if @group.users(true).empty?
@group.destroy
end
end
def remove_group_from_user(group)
user = current_user.id
if user
group.users.delete(user)
end
end
但是用户已在此组中关联帖子。当删除组 - 用户关联时,我需要删除用户和组的帖子之间的所有关联。
类似的东西:
group.posts.users.delete(current_user.id)
怎么做?
更新 这是有效的,但我根本不喜欢它。如何使它漂亮?
def remove_group_from_user(group)
user = current_user.id
if user
group.users.delete(user)
current_user.posts.where(group_id: group.id).
each do |post| #from here
post.users.delete(user)
if post.users(true).empty?
post.destroy
end
end
end
end
答案 0 :(得分:0)
如果您要删除组中特定用户的所有帖子,可以执行
group.posts.where(user_id: current_user.id).destroy_all
这也可以作为一种方法添加到帖子模型中,如此
def self.by_user(user)
where(user_id: user.id)
end
然后你可以通过调用
来完成同样的事情group.posts.by_user(current_user).destroy_all
但我建议将其放在每个模型中的回调中,以保持清洁。您可以在此处了解有关回调的更多信息http://api.rubyonrails.org/classes/ActiveRecord/Callbacks.html