2016-06-28 9 views
0

Meine apps/Modellordner sieht aus wie die ‚erwartete module_classe_file top_level Klasse definieren‘:eine Modul-Klasse mit dem gleichen Namen als Top-Level-Klasse zu haben:

models/ 
    module/ 
    category.rb 
    category.rb 

Aber ich kann nicht scheinen zu finden, Möglichkeit, Modul/Kategorie korrekt zu laden: Ich habe immer den Fehler Expected /app/models/module/category.rb to define Category.

Ab jetzt sehe ich nur zwei Möglichkeiten: es nicht zu autoloading Hinzufügen oder Umbenennen module/category.rb-module/module_category.rb, weder scheint wie eine gute Idee

Antwort

1

Ich denke, das Beste, was in Ihrem Fall zu tun ist, um die module/category.rb hinzufügen in das Verzeichnis lib.

  1. Nimm den Code aus category.rb und eine lib/category.rb Datei erstellen.

  2. Dann schließen Sie Ihre Modul-Code in Ihre app/models/category.rb

  3. In application.rb sicher sein config.autoload_paths << "#{Rails.root}/lib das lib Verzeichnis zu laden.

    class Category < ActiveRecord::Base 
        include Category 
    

Ich persönlich würde nicht wenn es auf diese Weise tun. Die Benennung wird imo verwirrend. Haben Sie versucht, Ihren Code zu vergeben?

Zum Beispiel könnte man dies auch versuchen:

models/ 
    category/ 
     category_something.rb #change the name of the file to something else 
    category.rb 

Dann in Ihrem category_something.rb

class Category::CategorySomething 
    #code code code 
end 

Und dann auf diese Weise können Sie den Code wie ein Modul verwenden.

+0

Danke. Dies ist ein großes Modul mit vielen Modellen, es wird für API-Anrufe verwendet, daher dachte ich, sein Platz wäre in/models statt in/lib. Ich sprach über das Umbenennen der Datei zu /module/module_category.rb in meiner Frage, aber ich hoffte, es gab eine weniger hässliche Art, es zu tun – user3033467

+0

Oh ja, du hast darüber in der Frage gesprochen :). Nun, das ist der einzige Weg, wie ich das mache. Vielleicht wird jemand mit etwas Besserem kommen. Wie auch immer, wenn du mit der lib-Route gehst, vergiss nicht, sie in deine App zu laden. 'config.autoload_paths <<" # {Rails.root}/lib'. Ich werde die Antwort aktualisieren. –

Verwandte Themen