2016-04-16 5 views
0

Wenn zum Beispiel habe ich diese Linie ein Modell zu generieren:Versalien- variable Umfang in Rails

bin/rails generate model Item Collection:references 

Dann wird es diese Art der Migration mit der Großreferenzgröße erzeugen:

class CreateItems < ActiveRecord::Migration 
    def change 
    create_table :items do |t| 
     t.references :Collection, index: true 

     t.timestamps 
    end 
    end 
end 

Und das generiert ein Collection_id-Feld in der Tabelle mit dem Großbuchstaben.

Das Problem ist, ich jetzt möchte ein Scope hinzuzufügen, zu filtern, Artikel von objektgruppen von der Steuerung:

Also habe ich diesen Bereich in das Modell der Artikel scope :collection_id, -> (Collection_id) { where collection_id: Collection_id }

Aber wenn ich nenne es in der Controller mit: @items = Item.collection_id (@ user.Collection_id)

Es stürzt mit:

formales Argument kann kein Konstante Umfang sein: objektgruppen, -> (objektgruppen) {wobei objekt: Gruppe objekt}^

I im Umfang las die Variablen nicht ein Groß variabel sein können, aber da die Migration schafft sie durch Standard so weiß ich nicht, ob das beabsichtigt ist oder ich mache es falsch.

Antwort

3

Ihren Umfang ändern:

scope :collection_id, -> (collection_id) { where collection_id: collection_id } 

Alle Variablen in dem Rubin eine mit Großbuchstaben beginnen eine Konstante ist. Ich schlage vor, Sie es zu beheben:

Erste Rollback-Migration:

bin/rake db:rollback 

zerstört Modell:

bin/rails destroy model Item Collection:references 

Modell generiert mit normaler Groß- und Kleinschreibung:

bin/rails generate model Item collection:references 

Das ist es.

Lesen Sie diese Ruby Variables, Constants and Literals

+0

Es wäre besser, eine Erklärung über die Verwendung von Ruby-Konstante als Scope-Argument zu dieser Antwort hinzuzufügen. – Ilya

+0

@Ilya das ist in Ordnung? –

+0

sicher, danke für update!) – Ilya

1

Warum Sie Sammlung kapitalisieren haben, wenn das Modell zu erzeugen? Rails macht Dinge auf eine bestimmte Art und Weise, um Ihnen viele Dienste zur Verfügung zu stellen. Wenn Sie seine Konvention missachten, werden Sie immer gegen Schienen kämpfen.

Ich würde die Migration zurücksetzen und die Modellgenerierung umkehren. Führen Sie es dann erneut aus, aber machen Sie die Verweise nicht groß und alles sollte wie erwartet funktionieren. Stellen Sie sicher, Sie Rollback vor Ihnen

rails destroy model Item 
+0

Danke, das war das Problem – lapinkoira