2014-02-11 9 views
5

Ich bin mit Schienen und folgende Störung zu erhalten:nicht definierte Methode `Enum‘ für # <Klasse: 0x007f099c303390>

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

Modell

class Location < ActiveRecord::Base 

    enum status: [ :current, :preffered ] 

end 

Wie kann ich diesen Fehler beseitigen.

+0

Ist 'enum' vielleicht ein reservierter Schlüssel? – lucke84

+0

Ich möchte Schienen Enum-Modul wie >> http://edgeapi.rubyonrails.org/classes/ActiveRecord/Enum.html verwenden –

+0

Welche Version von Schienen verwenden Sie? Weil Enums seit Version 4.1 unterstützt werden. – lucke84

Antwort

6

ActiveRecord::Enum wurde nur bei Rails unter commit db41eb8a eingeführt, und bisher wurde dieses Commit nur mit Rails-Tag v4.1.0.beta1 veröffentlicht.

Es ist wahrscheinlich, dass das aktuelle Rails-Juwel, das Sie verwenden, dieses Commit noch nicht hat und daher nicht über den Code für die Implementierung von enum verfügt.

Um zu überprüfen, um zu sehen, welche Version des Edelsteins Rails Sie haben, laufen:

bundle show rails 

Ich lief bundle update und dann bundle show rails und zeige mir:

[PATH TO YOUR GEMS]/rails-4.0.2 

Diese Version der Gem enthält den Code mit enum nicht. Sie können dies durch comparing what is in v4.0.2 with what is in v4.0.1.beta1 sehen. Wenn Sie auf "Datei geändert" klicken und dann eine Suche auf der Seite für enum.rb durchführen, werden Sie feststellen, dass dies vollständig neu hinzugefügter Code ist.

Wenn Sie, dass Sie die neu markierte Version von Rails gewährleisten, erhalten möchten, können Sie Ihre Gemfile ändern können, so dass Ihre Linie für einschließlich Schienen wie folgt aussieht:

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

Nachdem Sie eine bundle update tun, können Sie siehe durch ein bundle show rails zu tun, dass Sie die folgenden Schienen gem haben:

[PATH TO YOUR GEMS]/rails-f706d5f945c5 

f706d5f945c5 den Commit ist, dass für die Freigabe v4.1.0.beta1 markiert wurde.

Nachdem Sie diese neueste Version des Rails Juwel erhalten haben, sollten Sie Zugang zu dieser enum Funktionalität haben.

1

können Sie diese Funktion verwenden, indem Sie den Code in the filerails/activerecord/lib/active_record/enum Kopieren sowie die folgenden Zeilen:

module ActiveRecord 
    class Base 
    extend ActiveRecord::Enum 
    end 
end 

zu Ihrer lib/ Verzeichnis der App und dann require es in Ihrer environment.rb Datei -Ing. ZB .: in config/environment.rb

require 'active_record_enum' 

können Sie auf this code verweisen wir in der Produktion haben.

Verwandte Themen