Re: Feature Request: Track habtm changes

Matt Jones
Thu, 22 Aug 2013 16:24:03 -0000

On Aug 22, 2013, at 11:56 AM, Gabriel Sobrinho wrote:

> Hey guys,
>
> What do you think about tracking habtm changes?
>
> Apparently we can''t do that because when you change a habtm
association it is changed immediately on database instead of waiting the save
call (not sure why and the problem may not be because of that).
>
> Current behaviour:
>
> profile.roles_ids
> => []
>
> profile.update_attributes(:name => nil, :roles_ids => [...])
> => false
>
> profile.changes
> { "name" => [''Admin'', nil] }
>
>
> Expected behaviour:
>
> profile.roles_ids
> => []
>
> profile.update_attributes(:name => nil, :roles_ids => [...])
> => false
>
> profile.changes
> { "name" => [''Admin'', nil], :roles_ids =>
[[], [...]] }
>
>
>
> Giving some problem context, I have an application that need to audit
almost every change and I can track everything using the changes method but
habtm changes.
>
> We can write a solution like storing the initial state of roles_ids in an
after_initialize callback on the model and comparing it on a after_save but I
was thinking in a more "native" solution.
>
>
> What do you think?

Some quick thoughts:

* using the _ids= method on has_many doesn''t show up in changes either

* this could get really expensive if you have a lot of rows on the other end of
the HABTM, since you cache the complete list of IDs in memory

--Matt Jones