Ошибка имени неинициализированной константы в Ruby - PullRequest
2 голосов
/ 10 марта 2012

У меня странная ошибка, которую я не понимаю.У меня есть модель 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, страница отображается нормально. Но мой Relationshiop один-ко-многим, поэтому он должен читаться как «пещеры» в User, а не «пещера». Я считаю, что я прочитал все связанные вопросы здесь, в SO и в других местах,но мне кажется, ни одно из решений не применимо.

Ответы [ 3 ]

4 голосов
/ 10 марта 2012

Похоже, Рельсы не понимают, что единственное число пещер - пещера.Вы можете установить это вручную в config / initializers / inflections.rb:

inflect.irregular 'cave', 'caves'

Затем он попытается найти Cave вместо Cafe.

1 голос
/ 10 марта 2012

Ваша проблема в том, что Ruby использует несколько «изобретательский» Inflector для придания сингулярности вашим «Пещерам» и в итоге генерирует «Кафе».

Вы можете исправить поведение в inflections.rb в вашей конфигурации.

0 голосов
/ 10 марта 2012

Ошибка указывает на ваш show.html.erb файл просмотра, а не на new.html.erb файл просмотра.

возможно, у вас есть опечатка на show.html.erb.Проверьте это!

...