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: