Home > Enterprise >  Can you perform an inclusion validation based on an enum attribute value?
Can you perform an inclusion validation based on an enum attribute value?

Time:10-27

I have the model CouponRestriction, which has the attributes constraint_type and constraint_value.

constraint_type is an integer column (enum) and I should validate the value of constraint_value based on the constraint_type .

For example, if the constraint_type is "periodicity" I should validate that the constraint_value is within an array of given values ["monthly", "yearly"]. But if the constraint_type value is something else, the constraint_value permitted could be an array of ID's instead of words.

Is there a way to perform such validation depending on the enum column value without writing a custom validation?

I'm trying something like:

validates :constraint_value, inclusion: { in: ["week", "month", "year"] }, if: self.constraint_type == "periodicity"

but I'm getting NoMethodError: undefined method constraint_type for #<Class:0x0000558f3f19c188>

CodePudding user response:

You need to use a lambda

validates :constraint_value, 
          inclusion: { in: %w(week month year) }, 
          if: -> { constraint_type == "periodicity" }
  • Related