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'
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:
joins
/includes
method, always use the exact same name as the relation 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:
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With