On 21 October 2015 at 07:42, Eugene Gilburg <eugene.gilb...@gmail.com> wrote:
> Several times I found myself of need of a method that tells whether an
> ActiveRecord instance has just been created. For example, when writing
> generic activity logging code that needs to know whether model is newly
> created as opposed to updated, but the invocation is in a service outside of
> the model itself and thus I can't just write `after_create` and
> `after_update` hooks, except perhaps just to set custom flags for the
> service to inspect.
>
> It's not the same as `new_record?` because `new_record?` is only true before
> record is saved, not after save. I'm thinking `newly_created?` or
> `just_created?` name. Calling it `created?` would be too ambiguous and
> higher chance to clash with similarly named method by application developers
> in their own code.
>
> Essentially `new_record?` to `newly_created?` is the same as
> `marked_for_destruction?` is to `destroyed?`, or as `changes` is to
> `previous_changes`.
>
> In my app I've implemented the code like this:
>
>> def newly_created?
>>   id_changes = previous_changes['id']
>>   id_changes && id_changes.last && !id_changes.first
>> end

Not entirely sure exactly what you mean by newly created.  Do you mean
not updated since created (in which case you could compare created_at
and updated_at) or only just recently created (in which case you could
compare created_at to time now) or created within the current request
(in which case just remember in code that you have just created it) or
something else.

Colin

-- 
You received this message because you are subscribed to the Google Groups "Ruby 
on Rails: Talk" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to rubyonrails-talk+unsubscr...@googlegroups.com.
To post to this group, send email to rubyonrails-talk@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/rubyonrails-talk/CAL%3D0gLtJdQMPAW%2B65LJONxA0w5RPtyYiRrqTeF%3DrpHvGgpY%3DAg%40mail.gmail.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to