Casting ActiveRecord scopes or instances to ActiveType extended model classes

Updated . Posted . Visible to the public.

When working with ActiveType you will often find it useful to cast an ActiveRecord instance to its extended ActiveType::Record variant.

Starting with active_type 0.4.0 Show archive.org snapshot you can use ActiveType.cast for this:

class User < ActiveRecord::Base
  ...
end

class SignUp < ActiveType::Record[User]
  ...
end

user = User.find(1)
sign_up = ActiveType.cast(user, SignUp)
sign_up.is_a?(SignUp) # => true

This is basically like ActiveRecord#becomes Show archive.org snapshot , but with fewer bugs and more consistent behavior.

You can also cast an entire relation (scope) to a relation of an ActiveType::Record:

adult_users = User.where('age >= 18')
adult_sign_ups = ActiveType.cast(adult_users, SignUp)
sign_up = adult_sign_ups.find(1)
sign_up.is_a?(SignUp) # => true
Profile picture of Henning Koch
Henning Koch
Last edit
Michael Leimstädtner
Keywords
relations
License
Source code in this card is licensed under the MIT License.
Posted by Henning Koch to makandra dev (2015-06-12 11:25)