You actually need to have some extra logic to an existing model. What you can do is extract that extra logic to a service object which would wrap your original model with the desired behavior.
eg:
@wrapped_ticket = TicketWrapper(a_ticket)
and
class WrappedTicket
def initialize(ticket)
@wrapped_ticket
..
end
def get_ticket
record_access
return @wrapped_ticket
end
private
def record_access
...
end
end
you only use TicketWrapper
objects and collections and TicketWrapper
has all the desired functionality
I suggest you read this article for more info.