的Rails:NameError未初始化的数据库关系不断
我有一个名为模型 “魔方”,它代表的交易卡的集合:的Rails:NameError未初始化的数据库关系不断
应用程序/模型/ cube.rb
class Cube < ApplicationRecord
has_many :cubecards
validates :name, length: { in: 3..30 }
end
正如你可以看到,该模型具有cube_cards一个的has_many关系:
应用程序/模型/ 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对应一个号码,所以我有以下形式:
应用/视图/模块/ 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,但据我所知可以接受的解决方案不适用于我的代码和高度投票的解决方案是关于控制器。这里是我的魔方卡控制器:
应用程序/控制器/ 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'
我找到了解决这个问题。不幸的是,我遇到过很多与我之前曾经问过类似问题的人一样的问题:这里的问题源于我的变量命名不当。
我能够通过改变@cube.cubecards
修复代码@cube.cube_cards
此外,在PARAMS,我改变:cubecard
到:cube_card
事实证明,我应该为所有cubecard唯一使用的时间一个词在每个文件开头的Class
声明中。其他的东西都引用表cube_cards
,因此应该用这种方式拼写。
您的github仓库中的代码没有为Cube数据库迁移? –
@StephanePaquet,我添加了文件并重新提交。我已经移动它以放下桌子。我一直在使用db:migrate删除cubecards表并重新添加它,并且我不希望从多维数据集迁移中得到任何东西以便顺利完成 –
请发布实际错误。你只是展示你认为可能是错误的,而不是实际上错误的。如果两者相同,则不需要提问。 – jamesc