рельсы связанные таблицы неинициализированная постоянная ошибка

Во время изучения RoR я создаю то, что, как мне казалось, было довольно простым приложением с рецептами.

У меня есть таблица для пользователей, таблица для рецептов и таблица recipe_users, в которой пользователь сохраняет список рецептов.

Ошибка, которую я получаю от рельсов, - "неинициализированная константа User :: RecipeUser".

Мои модели следующие

class User < ActiveRecord::Base
   acts_as_authentic

   has_many :recipe_users
   has_many :recipes, :through = > :recipe_users
end

class Recipes < ActiveRecord::Base
   has_many :ingredients, :dependent => :destroy
   has_many :recipe_users
   has_many :users, :through => :recipe_users
end

class RecipeUsers < ActiveRecord::Base
  belongs_to :user
  belongs_to :recipe
end

теперь в моем контроллере пользователей я пытаюсь вызвать

 @user = User.find(current_user.id)
 @userRecipes = @user.recipes.find()

глядя на мои таблицы mysql Show Tables, я получаю

recipe_users
recipes
schema_migrations
user_sessions
users

так что, насколько я могу судить, я правильно поняла правила именования.

Любые предложения относительно того, почему я получаю эту ошибку?


person pedalpete    schedule 20.09.2010    source источник


Ответы (1)


Похоже, это была проблема соглашений об именах.

Я удалил все ссылки на recipe_users и воссоздал таблицу, модель и контроллер как блюда.

Не самое удачное имя, но все сложилось без сучка и задоринки.

Мне никогда не нравились соглашения об именах, которых, кажется, ожидают рельсы, я думаю, отчасти из-за множественного числа, без фактического информирования разработчика о том, какие имена могут ожидать рельсы.

person pedalpete    schedule 21.09.2010
comment
Да, это проблема, связанная с соглашением об именах в моделях Recipes, а также в RecipeUsers. Так как рельсы обеспечивают единственное соглашение об именах для моделей и множественное именование для контроллеров. - person Manish Nagdewani; 28.12.2018
comment
Название модели всегда должно быть в единственном числе, поскольку один объект модели относится к отдельной записи. В противном случае люди начали бы использовать для моделей такие имена, как Posts, Users и т. Д., Тогда как они должны быть Post и User. - person KULKING; 23.05.2021