Rails: неинициализированная константа NameError в отношении базы данных

У меня есть модель под названием "куб", которая представляет собой коллекцию торговых карт:

приложение / модели /cube.rb

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

Как видите, эта модель имеет отношение has_many с cube_cards:

приложение / модели /cube_card.rb

class CubeCard < ApplicationRecord
  belongs_to :cube
end

Придерживаясь этого руководства для помощи в создании этих отношений, код ссылается на этот стиль формы:

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

В целях тестирования я просто хочу, чтобы люди вводили число, соответствующее идентификатору карты, поэтому у меня есть следующая форма:

приложение / просмотров / кубики /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 доставляет мне неприятности: rails создает неинициализированную постоянную ошибку для Cube::CubeCard,

В других темах я заметил, что множественность была распространенной проблемой, но я не могу найти ничего, что могло бы быть проблемой здесь.

Я также заметил, что у этого парня была похожая проблема, но, насколько я могу судить, принятое решение не относится к моему коду, а решения с высоким рейтингом относятся к контроллеру. Вот мой контроллер кубических карт:

приложение / контроллеры /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,

Я также пытался изменить множественность cubecard в cubecards, добавив подчеркивание (cubecard -> cube_card а также cube_cards) и даже заглавные буквы cubecard -> CubeCard а также CubeCards но безрезультатно.

Учебник, которому я следую, похоже, сразу пропускает форму без единой проблемы, поэтому я знаю, что, будучи новичком, я, должно быть, допускаю некоторую элементарную ошибку, но я работаю уже около дня без очевидное решение.

Я запускаю это локально на компьютере с Windows 7, и после завершения планирую перенести его на веб-хостинг.

Если это полезно, я разместил код на 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'

1 ответ

Я нашел решение этой проблемы. К сожалению, я попал во многие те же атрибуты, что и люди, которые задавали подобные вопросы до меня: проблема здесь связана с неправильным присвоением имен моим переменным.

Я смог исправить код, изменив @cube.cubecards в @cube.cube_cards

Дополнительно в параметрах я поменял :cubecard в :cube_card

Как оказалось, единственный раз, когда я должен был использовать кубическую карту, так как все одно слово находится в Class объявления в начале каждого файла. Все остальное ссылается на таблицу cube_cardsи как таковое должно быть написано именно таким образом.

Другие вопросы по тегам