2012-03-10 1 views
2

У меня эта странная ошибка, которую я не понимаю. У меня есть модель 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 и в других местах, но я не применил ни одно из решений.

ответ

4

Звуки . как Rails не понимает, что единственное число пещер является пещера Вы можете установить вручную в конфигурации/инициализаторах/inflections.rb:

inflect.irregular 'cave', 'caves' 

Тогда он будет пытаться найти пещеру вместо Caf е.

+0

Спасибо, что делает! Вы не можете знать, насколько я с облегчением избавился от этого, это привело меня к сумасшедшим дням! Неужели так часто случаются такие ошибки? – Antoine

+0

Обычно Rails очень хорош в отношении перегибов и нахождении правильного плюрализуемого или сингулярного слова ... Слова с «v» в них, кажется, испортили его чаще, чем обычно. Например, единственное значение «любви» по умолчанию - «лоф». – Veraticus

+0

Точно такая же ошибка, как у меня тогда. Я новичок в рубине, я буду следить за этим, тем более, что мои модели будут частично на французском. – Antoine

1

Ваша проблема заключается в том, что Ruby использует несколько «изобретательских» Inflector, чтобы разделить ваши «Пещеры» и заканчивая созданием «Cafe».

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

-1

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

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

 Смежные вопросы

  • Нет связанных вопросов^_^