Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

ActiveRecord enum error: "is not a valid value"

I have a model with enum:

  enum pending_users: {
    pending_users_disabled: 0,
    pending_users_enabled: 1
  }

And here is how the field described in schema.rb:

t.integer  "pending_users",             limit: 4,     default: 0, null: false

When I try to update it via the controller with the following parameters:

 Parameters: {"utf8"=>"✓", "authenticity_token"=>"...", "group"=>{"pending_users"=>"1"}, "commit"=>"Update Group", "id"=>"33"}

I see the following error:

ArgumentError - '1' is not a valid pending_users:
  activerecord (4.2.7.1) lib/active_record/enum.rb:104:in `block (3 levels) in enum'
  activerecord (4.2.7.1) lib/active_record/attribute_assignment.rb:54:in `_assign_attribute'
  activerecord (4.2.7.1) lib/active_record/attribute_assignment.rb:41:in `block in assign_attributes'
  actionpack (4.2.7.1) lib/action_controller/metal/strong_parameters.rb:185:in `each_pair'
  activerecord (4.2.7.1) lib/active_record/attribute_assignment.rb:35:in `assign_attributes'
  activerecord (4.2.7.1) lib/active_record/persistence.rb:251:in `block in update'
  activerecord (4.2.7.1) lib/active_record/transactions.rb:351:in `block in with_transaction_returning_status'
  activerecord (4.2.7.1) lib/active_record/connection_adapters/abstract/database_statements.rb:213:in `block in transaction'
  activerecord (4.2.7.1) lib/active_record/connection_adapters/abstract/transaction.rb:184:in `within_new_transaction'
  activerecord (4.2.7.1) lib/active_record/connection_adapters/abstract/database_statements.rb:213:in `transaction'
  activerecord (4.2.7.1) lib/active_record/transactions.rb:220:in `transaction'
  activerecord (4.2.7.1) lib/active_record/transactions.rb:348:in `with_transaction_returning_status'
  activerecord (4.2.7.1) lib/active_record/persistence.rb:250:in `update'
  app/controllers/groups_controller.rb:53:in `update'

From my perspective, 1 is a valid value for the enum. What can cause such behavior?

like image 486
borisano Avatar asked Sep 01 '16 19:09

borisano


1 Answers

You should assign the enum with a string (the key). So 1 should instead be "pending_users_enabled".

like image 166
ollpu Avatar answered Oct 20 '22 11:10

ollpu