У меня эта странная ошибка, которую я не понимаю. У меня есть модель User
определяется как:Ошибка имени неинициализированного Ruby
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, страница отображается нормально. Но мои отношения один из многих, поэтому он должен читать как «пещеры» в «Пользовательском», а не «пещера». По-моему, я прочитал все связанные с этим вопросы здесь, в SO и в других местах, но я не применил ни одно из решений.
Спасибо, что делает! Вы не можете знать, насколько я с облегчением избавился от этого, это привело меня к сумасшедшим дням! Неужели так часто случаются такие ошибки? – Antoine
Обычно Rails очень хорош в отношении перегибов и нахождении правильного плюрализуемого или сингулярного слова ... Слова с «v» в них, кажется, испортили его чаще, чем обычно. Например, единственное значение «любви» по умолчанию - «лоф». – Veraticus
Точно такая же ошибка, как у меня тогда. Я новичок в рубине, я буду следить за этим, тем более, что мои модели будут частично на французском. – Antoine