У меня есть модель под названием «куб», которая представляет собой коллекцию коллекционных карточек:
приложение/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'