@article.article_groups.delete_if... Dosn't work!

If I try:

  @article.article_groups.delete_if {|x|
    x.group_id == x.group_id
  }

It does nothing.

If I try:

  articletmp.article_groups.each{ |x|
          @article.article_groups.delete(y)

}

It deletes some of the groups.

@article.article_groups.clear
works.

Why dosn’t the to first examples work as expected??

Do I have to put groups I don’t want to be deleted inn as hidden
fields in my form? (I of course dosn’t want every groups to be deleted
as in the example above).

  • Henrik

Henrik Ormåsen wrote:

  articletmp.article_groups.each{ |x|
          @article.article_groups.delete(y)

}

It deletes some of the groups.

@article.article_groups.clear
works.

Why dosn’t the to first examples work as expected??

article_groups is an AssociationCollection, for which
all the usual array methods work. But only some of these
methods like delete and clear have database side-effects.
The rest operate only on the in-memory array object.

So to make delete_if work on the database objects you
either have to write

@article.article_groups.delete(
@article.article_groups.select {|x| x.group_id == x.group_id}
)

or

@article.article_groups.each do |x|
@article.article_groups.delete(x) if x.group_id == x.group_id
end

or put the following in environment.rb

class ActiveRecord::Associations::AssociationCollection
def delete_if(&block)
delete( select(&block) )
end
end


We develop, watch us RoR, in numbers too big to ignore.

This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.

| Privacy Policy | Terms of Service | Remote Ruby Jobs