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
и как таковое должно быть написано именно таким образом.