Rails adds beginless range support to clusivity
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.
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.
Recommend
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK