2014-04-10 6 views
5

Ich habe die neue Enum-Funktion von Schienen 4.1 versucht und habe einige Probleme damit.Schienen 4.1 Enums: enum.status = Null

Mein Modell sieht wie folgt aus:

class Report < ActiveRecord::Base 
    after_save :notify_clients 
    before_update :update_progress 
    before_create do 
    self.status ||= 'started' 
    end 

    enum status: %w{started active fail success} 

    #... 
end 

Und wenn ich versuche, es so in meiner Ansicht zu verwenden:

.item{class: @report.status, data: {id: @report.id}} 

ich in meinem Browser sehen dies werde

<div class="item" data-id="25"> 

Ich versuchte herauszufinden, was status tatsächlich verwendet rails console:

[11] pry(main)> Report.all.sample.status 
    Report Load (0.3ms) SELECT `reports`.* FROM `reports` 
    => nil 
    [12] pry(main)> Report.all.sample.status 
    Report Load (0.2ms) SELECT `reports`.* FROM `reports` 
    => nil 
    [13] pry(main)> Report.all.sample.status 
    Report Load (0.3ms) SELECT `reports`.* FROM `reports` 
    => nil 
    [14] pry(main)> Report.all.sample.status 
    Report Load (0.2ms) SELECT `reports`.* FROM `reports` 
    => nil 

Und nun einen Blick auf diese:

[22] pry(main)> Report.all.sample.attributes['status'] 
    Report Load (0.2ms) SELECT `reports`.* FROM `reports` 
    => "3" 

ich es nicht bekomme ...

+0

Ich hatte eine ähnliche Frage: Warum werden meine enum Werte immer als null aufgelöst? @ WillKoehlers Antwort hat es geschafft. – plusjeff

Antwort

12

ich hatte das gleiche Problem. Es wurde verursacht, weil das enum-Feld als Zeichenfolge in meinem Schema anstelle einer Ganzzahl definiert wurde. In Ihrem Fall ist status wahrscheinlich als Zeichenfolge in Ihrem Schema definiert.

class CreateReport < ActiveRecord::Migration 
    def change 
    create_table :reports do |t| 
     ... 
     t.integer :status  # if this is t.string you get the symptoms described above! 
     ... 
    end 
    end 
end 
0

Sie können auch weiterhin Zeichenfolge in Ihrem Schema verwenden, aber es bedeutet, dass Sie explizit haben zu kartieren Beziehung zwischen Attribute und Datenbankwert unter Verwendung von Hash. So etwas Ähnliches;