2017-02-18 13 views
-1

Я получил эту ошибку при обращении к «MyModel»ArgumentError при использовании перечисления

ArgumentError: wrong number of arguments (3 for 0) from /Users/.../.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/activerecord-4.2.1/lib/active_record/enum.rb:131:in `block (4 levels) in enum' 

, когда я использую перечисления на моей модели

class MyModel < ActiveRecord::Base  
    include ActiveModel::Validations 
    enum transaction_type: { send: "send", reset: "reset", top_up: "top_up" } 
end 

, который никогда раньше не случалось. Я не думаю, что я делал что-то другое, чем обычно, когда настраивал его.

+0

использовать массив как 'enum' – uzaif

+0

@uzaif, который не будет работать в моем случае –

ответ

0

При использовании перечислений и передавая хэш, значение должно быть intgers только

class MyModel < ActiveRecord::Base  
    include ActiveModel::Validations 
    enum transaction_type: { send: 0, reset: 1, top_up: 2 } 
end 

В качестве альтернативы, вы можете использовать массивы

class MyModel < ActiveRecord::Base  
    include ActiveModel::Validations 
    enum transaction_type: [ :send, :reset, :top_up] 
end 

Примечание: когда значение добавляется к enum array, его положение в массиве должно поддерживаться, а новые значения должны быть добавлены только в конец массива. Если вы этого не хотите, следует использовать явный синтаксис хэша выше.

+0

вы уверены, что его целое число? Моя модель пользователя использует enum как this (enum role: {user: "user", admin: "admin"}), который работает просто отлично –

+0

Это зависит от типа данных вашего столбца 'transaction_type', это строка или int? –

+0

Тип данных - строка –