0

上NameError初期化されていない一定の私は、トレーディングカードのコレクションを表すというモデル "キューブ、" 持っている:あなたのようのRails:データベースの関係

アプリ/モデル/ cube.rb

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

を見ることができ、このモデルはcube_cardsとにhas_many関係を持っています

アプリ/モデル/ cube_card.rb

class CubeCard < ApplicationRecord 
    belongs_to :cube 
end 

この関係を作る助けをthis rails guideに従いながら、コードの参照このフォームのスタイル:テストのため

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

、私はただのカードIDに対応する番号を入力する人々をしたいので、私は持っています次の形式:

アプリ/ビュー/キューブ/ 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 %> 

問題は、@cube.cubecards.buildが私に問題を起こしているということです。レールでCube::CubeCardの初期化されていない一定のエラーがスローされます。

他のスレッドでは、pluralitya common issueになっていることがわかりましたが、ここで問題になるものは見つかりませんでした。

私はまた、this fellow had a similar issueに気付きましたが、受け入れられた解決策が私のコードには当てはまらないと言えるでしょう。投票率の高いソリューションはコントローラに関するものです。ここに私のキューブカードコントローラは次のとおりです。

アプリ/コントローラ/ 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 

もう一度明確にするために、cube多くcube_cardsを持つことができます。

Iはまた、アンダー追加、cubecardscubecard複数を変更しようとしている(cubecard - >cube_cardcube_cards)を、さらに大文字cubecard - >CubeCardと無駄にCubeCards

私が従っているチュートリアルは、1つの問題なしでフォームにスキップしているように見えるので、初心者である間違いをしているはずですが、今日は明らかな解決策なし。

私はこれをWindows 7マシンでローカルに実行しています。これは、完了したらウェブホストに移行する予定です。

有用な場合は、コードon githubを掲載しました。

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> 

はまた、私のコンソールには、次のようなエラーを吐く:

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

githubリポジトリのコードにCubeデータベースの移行がありませんか? –

+0

@StephanePaquet、ファイルを追加して再コミットしました。私はテーブルを落とすためにそれを動かしました。私はdb:migrateを使用してキューブテーブルを削除し、それを再度追加しました。キューブの移行から何もしたくないので、 –

+0

実際のエラーを投稿してください。実際に間違っているというよりむしろ間違っていると思うものだけを表示しています。両者が同じであれば、質問する必要はありません。 – jamesc

答えて

0

が、私はこの問題への解決策を見つけました。残念なことに、私は私の前に同様の質問をした人々と同じような罠に陥りました。私の変数の不適切な命名に由来します。結局のところ

私は@cube.cube_cards

@cube.cubecardsを変更することで、コードを修正することができましたがまた、のparamsに、私は、:cube_card

に私はのようにすべてのcubecardを使用している必要がありますだけの時間を:cubecardを変更しました1つの単語は、各ファイルの先頭にあるClass宣言にあります。他のすべての人はテーブルcube_cardsを参照するので、そのように正確に記入する必要があります。