【发布时间】:2018-03-05 16:56:28
【问题描述】:
我有一个名为“cube”的模型,它代表一组交易卡:
app/models/cube.rb
class Cube < ApplicationRecord
has_many :cubecards
validates :name, length: { in: 3..30 }
end
如您所见,此模型与 cube_cards 具有 has_many 关系:
app/models/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对应的数字,所以我有以下表格:
app/views/cubes/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 抛出一个未初始化的常量错误。
在其他线程中,我注意到plurality 一直是a common issue,但我在这里找不到任何问题。
我还注意到this fellow had a similar issue,但据我所知,接受的解决方案不适用于我的代码,并且投票率高的解决方案与控制器有关。这是我的立方体卡片控制器:
app/controllers/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 机器上本地运行它,并计划在完成后将其迁移到 Web 主机。
如果有帮助,我已经发布代码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'
【问题讨论】:
-
你的 github repo 中的代码没有针对 Cube 数据库的迁移?
-
@StephanePaquet,我添加了文件并重新提交。我移动它是为了放下桌子。我一直在使用 db:migrate 删除 cubecards 表并重新添加它,我不希望多维数据集迁移中的任何东西妨碍
-
请发布实际错误。您只是在展示您认为可能是错误的内容,而不是实际错误的内容。如果两者相同,则无需提问。
-
@jamesc 我很抱歉没有首先发布它。你确实提出了一个令人信服的观点。我已经用所有错误信息编辑了原始帖子。
标签: ruby-on-rails one-to-many nameerror uninitialized-constant