2016-09-21 1 views
0

Im Buling eine App mit Benutzermodell, das verschiedene Berechtigungen haben kann, beschrieben durch user_types-Modell (ID und Typ als Zeichenfolge). Da ich Schienen Test leite, ich Fehler immerRails können Autoload-Konstante nicht konstant user_type

LoadError: Unable to autoload constant User_type, expected app/models/user_type.rb to define it 

Hier ist mein Modell:

class UserType < ActiveRecord::Base 
    belongs_to :user 
    validates :type, presence: true, length: { maximum: 100 } 
end 

unten ist die Steuerung und Test-Datei

class UserTypeController < ApplicationController 
    def index 
     @user_type = User_type.all 
    end 
    def new 
     @user_type = User_type.build(user_type_params) 
    end 
    private 
    def user_type_params 
     params.require(:user_type).permit(:type) 
    end 
end 

Testing Modell:

require 'test_helper' 

class UserTypeTest < ActiveSupport::TestCase 
    # test "the truth" do 
    # assert true 
    # end 
    def setup 
    @user_type = User_type.new(id:2,type:"test") 
    end 
    test "is_valid" do 
    assert @user_type.valid? 
    end 

end 

Ich wollte einige grundlegende "is_va Deckel "testen und ich habe einen Fehler oben beschrieben. Ich habe auch das letzte Modell "user_type" gelöscht und es als "UserType" erstellt, aber es hat nicht funktioniert.

+0

Machen Sie Ihr UserType-Modell in app/models/user_type.rb? –

Antwort

0

Der Klassenname Ihres Modells lautet UserType. User_type ist nirgendwo definiert. Sie behalten entweder den Modellnamen bei und reparieren Ihren Test und Controller oder benennen den Modellnamen um. Ersteres ist die Rails-Konvention, also würde ich vorschlagen, dass Sie damit einverstanden sind (der CamelCased-Name).

+0

Alles richtig, aber: 1) Das war User_type Modellname, ich habe es gerade geändert, während 2) Ich bekomme diesen Fehler nach der Verwendung von @ UserType = UserType.new: ActiveRecord :: SubclassNotFound: Ungültige Single-Table-Vererbung Typ: test ist keine Unterklasse von UserType – andrey

+0

'type' ist der Standardattributname, wenn Sie die Vererbung einzelner Tabellen implementieren möchten. Sie können entweder Ihre Spalte umbenennen und den Accessor auf etwas anderes (z. B. "art") oder die Vererbungsspalte ändern. Siehe: http://api.rubyonrails.org/classes/ActiveRecord/ModelSchema/ClassMethods.html#method-i-inheritance_column – Teoulas

0

Während Ihres Controller und Test Sie User_type.all verwenden, User_type.build, User_type.new, aber Ihr Modell UserType benannt.

0

ändern Sie die Modellnamen zu UserType wie in der Klasse definiert und von diesem UserType Tabelle Modell type Spalt entfernen oder es zu so etwas wie user_type umbenennen, da dies ein reservierten Spaltenname ist, kann nur für einzelne Tabelle Vererbung verwendet werden.

+0

Ich habe dies: NoMethodError: undefinierte Methode 'type 'für # test/models /user_type_test.rb:11:in 'blockieren in 'mein benutzer_typ test: def setup \t @UserType = UserType.new (id: 2, beschreibung:" test ") ende test" check "do \t Assert @ UserType.valid? Ende – andrey

+0

Haben Sie die Spalte 'type' mit der Migration richtig umbenannt? und die Verwendung von "type" von überall entfernt, einschließlich in 'UserType'-Controller (in user_type_params) und Modell (d. h. in Anwesenheitsvalidierung)? – Sajan