On Feb 4, 11:33 pm, "[email protected]"
<[email protected]> wrote:
> 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.
Looks like delete_if just acts on the target array, not the
association itself (as a slight typing saver you can pass an array to
delete.
Fred
>
> 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
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups "Ruby
on Rails: Talk" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/rubyonrails-talk?hl=en
-~----------~----~----~----~------~----~------~--~---