2014-02-11 8 views
5

Я использую в рельсы и получить следующее сообщение об ошибке:неопределенный метод `перечисление» для # <Класс: 0x007f099c303390>

undefined method `enum' for #<Class:0x007f03202a1190 

Модель

class Location < ActiveRecord::Base 

    enum status: [ :current, :preffered ] 

end 

Как я могу удалить эту ошибку.

+0

Возможно, 'enum' зарезервированный ключ? – lucke84

+0

Я хочу использовать модуль reum enum как >> http://edgeapi.rubyonrails.org/classes/ActiveRecord/Enum.html –

+0

Какую версию рельсов вы используете? Поскольку перечисления поддерживаются начиная с версии 4.1. – lucke84

ответ

6

ActiveRecord::Enum был введен только для Rails в commit db41eb8a, и до сих пор это фиксация была выпущена только с тегом Rails v4.1.0.beta1.

Вполне вероятно, что текущий камень Rails, который вы используете, еще не имеет этого фиксации и, следовательно, не имеет кода для реализации enum.

Чтобы проверить, какая версия драгоценного камня Rails у вас есть, запустить:

bundle show rails 

Я просто побежал bundle update, а затем bundle show rails, и я показываю:

[PATH TO YOUR GEMS]/rails-4.0.2 

Эта версия gem не включает код с enum. Вы можете видеть это на comparing what is in v4.0.2 with what is in v4.0.1.beta1. Если вы нажмете «File Changed», а затем выполните поиск на странице для enum.rb, вы увидите, что это полностью новый код.

Если вы хотите, чтобы убедиться, что вы получите вновь помеченную версию Rails, вы можете изменить ваш Gemfile так, что ваша линия, включая рельсы выглядит следующим образом:

gem 'rails', :git => 'git://github.com/rails/rails.git', :tag => 'v4.1.0.beta1' 

После сделать bundle update, вы можете см, делая bundle show rails, что у вас есть следующие рельсы камень:

[PATH TO YOUR GEMS]/rails-f706d5f945c5 

f706d5f945c5 является коммит, который был помечен для выпуска v4.1.0.beta1.

После того, как вы получите эту версию с красными краями Rails, у вас должен быть доступ к этой функции enum.

1

Вы можете использовать эту функцию путем копирования кода в the filerails/activerecord/lib/active_record/enum плюс эти строки:

module ActiveRecord 
    class Base 
    extend ActiveRecord::Enum 
    end 
end 

в lib/ каталог приложения, а затем require -ную его в файле environment.rb. Например, в .: config/environment.rb

require 'active_record_enum' 

Вы можете обратиться к this code мы имеем в производстве.

Смежные вопросы