3

Rails adds beginless range support to clusivity

 1 year ago
source link: https://blog.saeloun.com/2022/08/18/rails-beginless-inclusion
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

Rails adds beginless range support to clusivity

Aug 18, 2022 , by Murtaza Bagwala

1 minute read

Now that Ruby 2.7 has added the support for beginless range, Rails 7 also adds support to include the beginless range in ActiveRecord inclusivity/exclusivity validators.

Prior to Rails 7, if we were to add a validation to a Product model where the price needs to be within 5000, we’d have to follow this method-

Before

  class Product < ApplicationRecord

    validates_inclusion_of :price, in: 0..5000

  end

Also, if we would try adding beginless range, then it will throw an error.

  => Product.create(title: "Detergent", description: "A mixture of surfactants with cleansing properties", price: 4000)
  /Users/.rvm/gems/ruby-3.0.2/gems/activemodel-7.0.3/lib/active_model/validations/clusivity.rb:45:in `first': cannot get the first element of beginless range (RangeError)

As it can be seen, it throws an error saying cannot get the first element of beginless range.

After

After Rails 7, we can now add the beginless range.

  class Product < ApplicationRecord

    validates_inclusion_of :price, in: ..5000

  end
  => Product.create(title: "Detergent", description: "A mixture of surfactants with cleansing properties", price: 4000)
  => TRANSACTION (7.5ms)  BEGIN
  Product Create (5.0ms)  INSERT INTO "products" ("name", "description", "created_at", "updated_at", "price") VALUES ($1, $2, $3, $4, $5) RETURNING "id"  [["name", "Detergent"], ["description", "A mixture of surfactants with cleansing properties"], ["created_at", "2022-08-10 20:10:06.227125"], ["updated_at", "2022-08-10 20:10:06.227125"], ["price", 4000]]
  TRANSACTION (2.5ms)  COMMIT                                                                                      

Check out the PR for more details.


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK