0

Ich habe ein Modell namens "Würfel", die eine Sammlung von Sammelkarten dar:Rails: Nameerror nicht initialisierte Konstante auf Datenbank Beziehung

app/models/cube.rb

class Cube < ApplicationRecord 
    has_many :cubecards 
    validates :name, length: { in: 3..30 } 
end 

Wie Sie sehen kann, hat dieses Modell eine has_many Beziehung mit cube_cards:

app/models/cube_card.rb

class CubeCard < ApplicationRecord 
    belongs_to :cube 
end 

Während folgende this rails guide für Hilfe, um diese Beziehung zu schaffen, die Code-Referenzen dieser Form Stil:

<%= form_with(model: [ @article, @article.comments.build ], local: true) do |form| %> 

Für Testzwecke, ich will nur Leute zur Eingabe einer Nummer, die mit der Karte ID entspricht, so hat ich die folgende Form:

app/views/Würfel/show.html.erb

<%= form_with(model: [ @cube, @cube.cubecards.build ], local: true) do |form| %> 
    <p> 
    <%= number_field(:card, :id, in: 1.0..8000.0, step: 1) %> 
    </p> 
    <p> 
    <%= form.submit %> 
    </p> 
<% end %> 

Das Problem ist, @cube.cubecards.build gibt mir Probleme: Schienen löst einen nicht initialisierten konstanten Fehler für Cube::CubeCard.

In anderen Threads, habe ich festgestellt, dass pluralitya common issue gewesen ist, aber ich kann nichts finden, das hier ein Problem wäre.

Ich habe auch bemerkt, dass this fellow had a similar issue, aber soweit ich sagen kann die akzeptierte Lösung nicht auf meinen Code und die hoch bewerteten Lösungen sind über den Controller. Hier meine Würfel Karten-Controller ist:

app/controllers/cube_cards_controller.rb

class CubeCardsController < ApplicationController 
    def create 
    @cube = Cube.find(params[:cube_id]) 
    @cubecard = @cube.cubecards.create(cubecard_params) 
    redirect_to cube_path(@cube) 
    end 

    private 
    def cubecard_params 
     params.require(:cubecard).permit(:card) 
    end 
end 

Um zu klären, einmal mehr, kann ein cube haben vielecube_cards.

Ich habe auch versucht, die Vielzahl von cubecard-cubecards ändern, Hinzufügen des Unterstriches (cubecard ->cube_card und cube_cards), und auch die Kapitalisierung cubecard ->CubeCard und CubeCards ohne Erfolg.

Das Tutorial, das ich folge, scheint direkt auf das Formular zu überspringen, ohne ein einziges Problem, also weiß ich, dass ich als Neuling einen elementaren Fehler machen muss, aber ich arbeite seit ungefähr einem Tag jetzt ohne offensichtliche Lösung.

Ich führe dies lokal auf einem Windows 7-Rechner, mit den Plänen, es zu einem Web-Host zu migrieren, sobald abgeschlossen. Wenn es hilfreich ist, habe ich den Code on github gepostet.

NameError in Cubes#show 

Showing C:/Sites/pokecube/app/views/cubes/show.html.erb where line #25 raised: 

uninitialized constant Cube::Cubecard 

Extracted source (around line #25): 

<p> 
    Add a Card: 
    <%= form_with(model: [ @cube, @cube.cubecards.build ], local: true) do |form| %> 
    <p> 
    <%= number_field(:card, :id, in: 1.0..8000.0, step: 1) %> 
    </p> 

Auch spuckt meine Konsole die folgende Fehlermeldung aus:

Completed 500 Internal Server Error in 69ms (ActiveRecord: 1.0ms) 

ActionView::Template::Error (uninitialized constant Cube::Cubecard): 
22: 
23: <p> 
24: Add a Card: 
25: <%= form_with(model: [ @cube, @cube.cubecards.build ], local: true) do |form| %> 
26: <p> 
27:  <%= number_field(:card, :id, in: 1.0..8000.0, step: 1) %> 
28: </p> 

app/views/cubes/show.html.erb:25:in `_app_views_cubes_show_html_erb___540381856_44810532' 
+0

Der Code in Ihrem Github Repo hat keine Migration für die Cube-Datenbank? –

+0

@StephanePaquet, habe ich die Datei zurück und erneut eingefügt. Ich hatte es bewegt, um den Tisch fallen zu lassen. Ich hatte db: migrate verwendet, um die Cubecards-Tabelle zu löschen und sie erneut hinzuzufügen, und ich wollte nicht, dass irgendetwas von der Cube-Migration in den Weg kam. –

+0

Bitte den aktuellen Fehler posten. Sie zeigen nur, was Sie für falsch halten, anstatt was eigentlich falsch ist. Wenn die beiden gleich wären, müssten Sie die Frage nicht stellen. – jamesc

Antwort

0

ich eine Lösung für dieses Problem gefunden. Unglücklicherweise bin ich in die gleichen Fälle geraten wie Leute, die ähnliche Fragen vor mir gestellt haben: Das Problem liegt hier in der falschen Benennung meiner Variablen.

ich in der Lage war zusätzlich den Code zu beheben, indem @cube.cubecards-@cube.cube_cards

Wechsel in den params, änderte ich :cubecard-:cube_card

Wie sich herausstellt, das einzige Mal, dass ich cubecard wie alle verwendet haben sollte Ein Wort steht in den Class Deklarationen am Anfang jeder Datei. Alles andere verweist auf die Tabelle cube_cards und sollte daher genau so buchstabiert werden.

Verwandte Themen