2014-01-22 2 views
0

Итак, я построил новый контроллер = "Categories_controller.rb" и новую Model = "Category.rb", и теперь я обычно беру модель Savedfriend.rb и использую ее с такой же моделью Category.rb;неинициализированная постоянная в рельсах?

<%= category.savedfriends.size %> 

Однако на этот раз я продолжаю получать;

uninitialized constant Category::Savedfriend 

Это сводит меня с ума. У меня есть все модели, на которых установлено свойство belongs_to.

+0

Является ли ваш класс «SavedFriend» именно в папке 'models' или находится в нем подпапка? – tolgap

ответ

2

По соглашению Rails, если вы еще не указали свой class_name об ассоциации, он будет искать уникальную версию с именем ассоциации для названия класса. Если, например, у вас есть модель SavedFriend, ваша ассоциация должна быть названа saved_friends. Если он не может найти класс для ассоциации, Rails имеет тенденцию искать класс в классе, который пытается его вызвать. Ошибка немного неясна, но я видел это много раз, когда у меня есть опечатка в моих ассоциациях.

# in app/models/saved_friends.rb 
class SavedFriend < ActiveRecord::Base 
    belongs_to :category 
end 

# in app/models/category.rb 
class Category < ActiveRecord::Base 
    has_many :saved_friends 
end 

Кроме того, если ваша схема присвоения имен файлов и классы, как спорадическая, как это в вашем вопросе, вы будете иметь плохое время. Имена файлов должны быть строчными и подчеркнутыми, имена классов должны быть верблюдной версией имени файла. то есть Categories_controller.rb должно быть categories_controller.rb, а класс должен быть CategoriesController. Аналогичным образом, saved_friend.rb должен содержать class SavedFriend.

+0

моя ошибка в названии файла в вопросе, все мои файлы в нижнем регистре :) извините – user2419316

+0

@ user2419316 Это не просто нижний регистр, должны быть подчеркивания для каждого корпуса верблюда. – tolgap

+0

Отредактированный ответ, чтобы более четко продемонстрировать соглашение и соответствующие декларации. –

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