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.