Подтвердить что ты не робот

Ассоциация не найдена, возможно, проблема с ошибкой в ​​ассоциации rails

Вот мой контроллер

@post = Post.joins(:customers).select("customers.*,posts.*").find params[:id]

Моя модель публикации

belongs_to :customer

Моя модель клиента

has_many :posts

И я получаю ошибку как

Association named 'customers' was not found on Post; perhaps you misspelled it?

Это мой вывод контроллера:

Processing by PostsController#show as */*
  Parameters: {"id"=>"6"}
  Post Load (0.5ms)  SELECT "posts".* FROM "posts" WHERE "posts"."id" = $1 LIMIT 1  [["id", "6"]]
Completed 500 Internal Server Error in 113ms

ActiveRecord::ConfigurationError (Association named 'customers' was not found on Post; perhaps you misspelled it?):
  app/controllers/posts_controller.rb:16:in `show'
4b9b3361

Ответ 1

Это типичная ошибка опечатки:

@post = Post.joins(:customers).select("customers.*,posts.*").find params[:id]
# should be:
@post = Post.joins(:customer).select("customers.*,posts.*").find params[:id]
                          #^^ no plural

Потому что вы определили отношение, подобное этому (используя единственное):

# Post model
belongs_to :customer

Некоторые вещи, которые нужно знать:

  • В методе joins/includes всегда используйте то же имя, что и отношение
  • В предложениях where всегда используйте множественное имя отношения (фактически, имя таблицы, которое по умолчанию является именем модели во множественном числе, но также может быть установлено вручную).

Примеры:

# Consider these relations:
User has_many :posts
Post belongs_to :user

# Usage of joins/includes & where:
User.includes(:posts).where(posts: { name: 'BlogPost #1' })
                  #^            ^
Post.joins(:user).where(users: { name: 'Little Boby Table' })
              #^^           ^

Похожие вопросы: