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

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

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

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

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

app/models/cube_card.rb

class CubeCard < ApplicationRecord
  belongs_to :cube
end

Следуя этому руководству по rails для помощи в создании этой связи, ссылки на код этот стиль формы:

<%= 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'

person Dakota B    schedule 24.09.2017    source источник
comment
Код в вашем репозитории github не имеет миграции для базы данных Cube?   -  person Stephane Paquet    schedule 24.09.2017
comment
@StephanePaquet, я снова добавил файл и повторно зафиксировал. Я передвинул его, чтобы уронить стол. Я использовал db:migrate, чтобы удалить таблицу cubecards и повторно добавить ее, и я не хотел, чтобы миграция куба мешала чему-либо.   -  person Dakota B    schedule 24.09.2017
comment
Напишите фактическую ошибку, пожалуйста. Вы показываете только то, что, по вашему мнению, может быть не так, а не то, что на самом деле неправильно. Если бы они были одинаковыми, вам не нужно было бы задавать вопрос.   -  person jamesc    schedule 25.09.2017
comment
@jamesc Прошу прощения за то, что не опубликовал это в первую очередь. Вы делаете убедительный вывод. Я отредактировал исходный пост со всей информацией об ошибке.   -  person Dakota B    schedule 25.09.2017


Ответы (1)


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

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

Кроме того, в параметрах я изменил :cubecard на :cube_card

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

person Dakota B    schedule 09.10.2017