On Sunday, March 30, 2014 9:51:06 PM UTC-7, Nicolas Goy wrote:
>
> Given a many_to_many association,
>
> many_to_many :categories
>
> I want to add an accessor for category_ids.
>
> Until now I was using the following code:
>
> def category_ids
>   @category_ids || categories_dataset.select_map(:id)
> end
>
> def category_ids=(ids)
>   @category_ids = ids
>   modified!
> end
>
> def after_save
>   super
>   if defined?(@category_ids)
>     self.remove_all_categories
>     Category.where(:id => @category_ids).each do |c|
>       self.add_category(c)
>     end
>   end
> end
>
> I was wondering if there was a better approach.
>

The association_pks plugin handles this for you, though it doesn't defer 
the handling until after save.  You can use the instance_hooks plugin to do 
that:

  plugin :association_pks
  plugin :instance_hooks

  many_to_many :categories

  object.after_save{object.category_pks = [1, 2, 3]}

The association_pks plugin is a little faster than the code you used, since 
for items that haven't changed, it doesn't delete them just to reinsert 
them later.

Thanks,
Jeremy

-- 
You received this message because you are subscribed to the Google Groups 
"sequel-talk" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/sequel-talk.
For more options, visit https://groups.google.com/d/optout.

Reply via email to