1

我有一个名为“立方体”的模型,它代表一组交易卡:

应用程序/模型/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

在遵循此 Rails 指南以帮助创建此关系时,代码引用了此表单样式:

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

在其他线程中,我注意到复数一个常见问题,但我在这里找不到任何问题。

我也注意到这个家伙也有类似的问题,但据我所知,接受的解决方案不适用于我的代码,而且投票率高的解决方案是关于控制器的。这是我的立方体卡控制器:

应用程序/控制器/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

再次澄清, acube可以有很多 cube_cards.

我还尝试将复数更改cubecardcubecards,添加下划线(cubecard->cube_cardcube_cards),甚至大写cubecard->CubeCardCubeCards无济于事。

我正在关注的教程似乎直接跳到表单没有一个问题,所以我知道,作为一个新手,我一定犯了一些基本错误,但我已经工作了大约一天,没有明显的解决方案。

我在 Windows 7 机器上本地运行它,并计划在完成后将其迁移到 Web 主机。

如果有帮助,我已经在 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'
4

1 回答 1

0

我找到了解决这个问题的方法。不幸的是,我陷入了许多与在我之前提出类似问题的人相同的陷阱:这里的问题源于我的变量命名不当。

我能够通过更改为来修复@cube.cubecards代码@cube.cube_cards

另外,在参数中,我:cubecard改为:cube_card

事实证明,我应该使用 cubecard 的唯一一次是在Class每个文件开头的声明中。其他所有内容都引用 table cube_cards,因此应该以这种方式准确拼写。

于 2017-10-09T02:06:07.090 回答