ruby-on-rails - Ruby 未初始化常量名称错误

标签 ruby-on-rails ruby nameerror

我有一个我不明白的奇怪错误。我有一个模型 User 定义为:

class User < ActiveRecord::Base
validates_presence_of :name, :email

has_many :caves
end

关联模型 Cave 定义为:

class Cave < ActiveRecord::Base
  belongs_to :user
end

在我的用户的显示方法中,我提议创建一个新的洞穴:

<%= form_for([@user, @user.caves.build]) do |f| %>
<div class="field">
  <%= f.label :name %><br />
  <%= f.text_field :name %>
</div>
<div class="actions">
  <%= f.submit %>
</div>

但是当我显示页面时,出现以下错误:

NameError in Users#show
Showing E:/Vinisync/app/views/users/show.html.erb where line #19 raised:

uninitialized constant User::Cafe

Extracted source (around line #19):
16: </p>
17: 
18: <h2>Add a Cave</h2>
19: <%= form_for([@user, @user.caves.build]) do |f| %>
20:   <div class="field">
21:     <%= f.label :name %><br />
22:     <%= f.text_field :name %>

我不知道这个“咖啡馆”到底从哪里来,我的代码中没有这个词!
我注意到,如果我将 User.rb 中的关联重命名为 has_many :cave 而不是当前的 has_many :caves (并在表单中更改它)用户的 show.html.erb ,页面显示正常。但是我的关系是一对多,所以它应该在 User 中读为“caves”,而不是“cave”。我相信我已经在 SO 和其他地方阅读了所有相关问题,但我似乎没有一个解决方案适用。

最佳答案

听起来 Rails 没有意识到 Caves 的单数是 Cave。您可以在 config/initializers/inflections.rb 中手动设置:

inflect.irregular 'cave', 'caves'

然后它会尝试寻找 Cave 而不是 Cafe。

关于ruby-on-rails - Ruby 未初始化常量名称错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9647826/

相关文章:

python - 为什么我会收到 NameError : name 'train_test_split' is not defined?

ruby-on-rails - rails 4 -- 连接 collection_select 中的字段

html - Foundation 5 图标在生产中不起作用,rails

mysql - 通过 Rails 使用来自 AMPPS 的 MySQL

ruby 正则表达式 : exclude apostrophe but include it if it's escaped

python 名称错误 : global name '__file__' is not defined

ruby-on-rails - ActiveAdmin 过滤器 bool 值作为单个复选框

ruby-on-rails - 禁用主动疯狂发货

ruby - 不能使用数组作为 Ruby Hash 的默认值吗?

python - NameError:名称 'Frame' 未定义(Python)