2012-04-08 4 views
3

Mein Benutzermodell verwendet die column_names-Methode, um mass_assignment für alle Spalten für Administratoren zuzulassen.Rake db: migrate schlägt bei Verwendung von devise_for für Modelle fehl, die Klassenmethoden verwenden, die die db treffen

class User < ActiveRecord::Base 

    attr_accessible :email, :password, :password_confirmation, :remember_me 
    attr_accessible *column_names, as: :admin 

end 

Dies ist jedoch nicht gut spielen mit meiner Route-Datei, die

Sandbox::Application.routes.draw do 
    devise_for :users 
end 

, die konfiguriert ersinnen hat, ist, wenn ich will über „rake db meine Benutzer-Tabelle erstellen: Migration RAILS_ENV = test ". Ich bekomme

rake aborted! 
Mysql2::Error: Table 'sandbox_test.users' doesn't exist: SHOW FULL FIELDS FROM `users` 

Voll Spur bei http://pastie.org/3748502

Ich kenne die Tabelle muß nicht existieren, das ist, warum ich meine Migration ausführen müssen, aber irgendwie rake db: migrate RAILS_ENV = Test die Routen neu geladen, so ruft devise_for und devise_for lädt die Benutzerklasse beim Hinzufügen der Gerätezuordnung und ruft damit die Methode column_names für eine Tabelle auf, die noch nicht existiert.

Also bin ich nicht wirklich sicher, wie man das sauber behandelt? Sollte ich add hinzufügen, wenn table_exists? Immer wenn ich die column_names Methode benutzen möchte? Oder gibt es einen besseren Weg, um mit diesem Problem umzugehen?

Antwort

0

Ich denke, der sauberste Weg dies zu tun wäre, die Attribute, die Sie für Admins verfügbar sind, aufzulisten. Das Testen auf das Vorhandensein eines Tisches oder das Ausführen von etwas mit Rettung wird deine Absicht wahrscheinlich verschleiern.

+0

Ich sehe. Ich muss diese Zeile jedoch jedes Mal ändern, wenn ich eine neue Spalte hinzufüge – redgetan

Verwandte Themen