New in Rails 7.2: Active Model Got type_for_attribute

What’s New? #

Ruby on Rails 7.2 brings a handy change. The type_for_attribute method is now in Active Model.

Image description

What is type_for_attribute? #

It’s a method that simplifies type checking, relieving you from the burden of manual checks for both Active Record and Active Model.

How it Works #

Here is a simple example:


class MyModel

  include ActiveModel::Attributes

  attribute :my_attribute, :integer

end

MyModel.type_for_attribute(:my_attribute) # => #<ActiveModel::Type::Integer ...>

Real-Life Example #

Think of a signup form. You need to check the types of inputs. Here is how you can use it:

class SignupForm

  include ActiveModel::Attributes

  attribute :email, :string

  attribute :age, :integer

  def initialize(params)

    @params = params

    @params.each do |key, value|

      if self.class.type_for_attribute(key.to_sym)

        send("#{key}=", value)

      else

        raise "Unknown attribute type"

      end

    end

  end

end

form = SignupForm.new(email: "test@example.com", age: "twenty")

# raises "Unknown attribute type" if age is not an integer

Before the Change #

Before this update, you had to write custom code. You had to check types manually.

After the Change #

Now, type_for_attribute makes it easy and saves you valuable time. Just include ActiveModel::Attributes. It makes your code cleaner and your development process more efficient.

Why It Matters #

This change empowers you to catch errors, ensures data integrity, and is a small but powerful tool that puts you in control of your code.

In Summary #

Ruby on Rails 7.2 simplifies type checking. Use type_for_attribute with the Active Model. It’s quick and efficient. This change is a great addition. Give it a try in your next project!