Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

association named not found perhaps misspelled issue in rails association

Here is my controller

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

My post model

belongs_to :customer 

My customer model

has_many :posts 

And i am getting error as

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

This is my controller output:

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' 
like image 263
Prabhakaran Avatar asked Oct 07 '13 18:10

Prabhakaran


1 Answers

This is a typical typo error:

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

Because you defined the relation like this (using singular):

# Post model belongs_to :customer 

Some stuff to know:

  • In the joins/includes method, always use the exact same name as the relation
  • In the where clauses, always use the pluralized name of the relation (actually, the table's name, which is by default the model name in plural but can also be manually set)

Examples:

# 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' })               #^^           ^ 

Similar questions:

  • How to query a model based on attribute of another model which belongs to the first model?
  • Rails active record querying association with 'exists'
  • Rails 3, has_one / has_many with lambda condition
  • Rails 4 scope to find parents with no children
like image 80
MrYoshiji Avatar answered Oct 11 '22 20:10

MrYoshiji