2016-06-30 9 views
0

ich die folgende Fehlermeldung erhalten, während rake db ausgeführt wird: Migration:nicht Tisch mit ‚id‘ gefunden = alle Migration Fehler in Rails 4.2.6

Standarderror: ein Fehler aufgetreten ist, später Migrationen diese und alle abgesagt:

finden konnte Bericht nicht mit 'id' = alle [. WHERE "Berichte" "deleted_at" IS NULL]

Theseare meine 2 Migrationsdateien:

Class AddColorToReports < ActiveRecord::Migration 
    def self.up 
    add_column :reports, :button_color, :string 

    Report.find(:all).each do |r| 
     r.update_attribute(:color, r.top_stroke_color) 
    end 
    end 

    def self.down 
    remove_column :reports, :button_color 
    end 
end 


class AddDeletedAtToReport < ActiveRecord::Migration 
    def change 
    add_column :reports, :deleted_at, :datetime 
    end 
end 

Die Migrationen Flosse e bei der Ausführung von Rail 3.2 und 4.0, aber hier in 4.2.6, funktioniert nicht.

Bitte sagen Sie mir, wie kann ich das beheben?

Antwort

2

Blick auf die Dokumention für das Verfahren find für Version> 4.0:

Find by id - This can either be a specific id (1), a list of ids (1, 5, 6), or an array of ids ([5, 6, 10]). If no record can be found for all of the listed ids, then RecordNotFound will be raised. If the primary key is an integer, find by id coerces its arguments using to_i.

Ein für version < 4.0:

Find operates with four different retrieval approaches:

  • Suche von id - Dies kann entweder eine bestimmte ID sein (1) eine Liste von IDs (1, 5, 6) oder ein Array von IDs ([5, 6, 10]). Wenn für alle aufgelisteten IDs kein Eintrag für gefunden wird, wird RecordNotFound ausgelöst.
  • Zuerst suchen - Dies gibt den ersten Datensatz zurück, der mit den Optionen übereinstimmt. Diese Optionen können entweder spezifische Bedingungen oder nur eine Bestellung sein. Wenn kein Datensatz gefunden werden kann, wird NULL zurückgegeben. Verwenden Sie Model.find (: erste, * args) oder seine Verknüpfung Model.first (* args).
  • Zuletzt suchen - Dies gibt den letzten Datensatz zurück, der mit den Optionen verwendet wurde. Diese Optionen können entweder spezifische Bedingungen oder nur eine Bestellung sein. Wenn kein Datensatz gefunden werden kann, wird NULL zurückgegeben. Verwenden Sie Model.find (: last, * args) oder die Verknüpfung Model.last (* args).
  • Alle finden - Dies gibt alle Datensätze zurück, die mit den Optionen übereinstimmen. Wenn keine Datensätze gefunden werden, wird ein leeres Array zurückgegeben. Verwenden Sie Model.find (: alle, * args) oder seine Verknüpfung Model.all (* args).
+0

Kann ich stattdessen 'Report.all.to_a.each do | r |' verwenden? – venkat

+1

@venkat Ohne 'to_a',' Report.all.each {| r | ...} 'oder mehr _Rails_' Report.find_each {| r | ...} ' –