在rails中使用排除和包含方法有什么用?

Sda*_*dad 3 ruby ruby-on-rails

我读了rails doc发现exclusioninclusion方法这个描述

2.4排除

此帮助程序验证属性的值不包含在给定集中.实际上,这个集合可以是任何可枚举的对象.

但不明白使用它

2.6包容

相同的定义

Seb*_*lma 5

随着exclusion您可以验证为你指定不采取任何这些对的值的属性值in选项.

举个汽车模型的例子,你有价格,规格,品牌等(未标准化).您可以阻止创建具有品牌丰田的汽车,添加该特定品牌,并且在保存记录时,由于验证,它将引发错误,并且交易将遭受回滚.

class Car < ApplicationRecord
  validates :brand, exclusion: { in: %w[hyundai toyota peugeot] }
end

car = Car.new(price: 11111, brand: 'hyundai')
car.valid? # false
car.errors.messages
# => {:brand=>["is reserved"]}
car.save
#   (0.1ms)  begin transaction
#   (0.1ms)  rollback transaction
# => false
Run Code Online (Sandbox Code Playgroud)

只要品牌不是"hyundai","toyota"或"peugeot",您就可以制造任何车型.

请注意,验证区分大小写.是不一样的"现代"或"现代"(或任何其他).

ActiveRecordValidations#inclusion与排除相反,它检查的值只能是in选项中的任何一个.