I tried to user delete_if on an association:
class Group < ActiveRecord::Base has_many :memberships, :dependent => :destroy has_many :users, :through => :memberships
... end
This is the controller method, trying to use delete_if. Although some elements are removed (s2 < s1), the save method does not update the association.
def intersect_or_remove_group other_group = Group.find(params[:group_id]) s1 = @group.users.size case params[:submit] when "Intersect" @group.users.delete_if { |u| !other_group.users.include?(u) } when "Remove" @group.users.delete_if { |u| other_group.users.include?(u) } end s2 = @group.users.size if s2 < s1 @group.save end redirect_to @group end
If I rewrite it like this, it works just fine:
def intersect_or_remove_group other_group = Group.find(params[:group_id]) s1 = @group.users.size to_be_deleted = Array.new case params[:submit] when "Intersect" @group.users.each { |u| to_be_deleted << u if ! other_group.users.include?(u) } when "Remove" @group.users.each { |u| to_be_deleted << u if other_group.users.include?(u) } end to_be_deleted.each { |u| @group.users.delete(u) } s2 = @group.users.size if s2 < s1 @group.save end redirect_to @group end
Is this a bug or a feature?
Thanks for any help in advance
Regards
Alexander