associazione nome non trovato errore forse errato nell’associazione rails

Ecco il mio controller

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

Il mio modello di post

 belongs_to :customer 

Il mio modello di cliente

 has_many :posts 

E sto ricevendo errore come

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

Questa è l’uscita del mio controller:

 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' 

Questo è un tipico errore di battitura:

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

Perché hai definito la relazione come questa (usando singolare):

 # Post model belongs_to :customer 

Alcune cose da sapere:

  • Nel metodo joins / includes , usa sempre lo stesso nome della relazione
  • Nelle clausole where , usa sempre il nome pluralizzato della relazione (in realtà, il nome della tabella, che per default è il nome del modello al plurale ma può anche essere impostato manualmente)

Esempi:

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

Domande simili:

  • Come interrogare un modello in base all’attributo di un altro modello che appartiene al primo modello?
  • Rota l’associazione di query di record triggers con “esiste”
  • Rails 3, has_one / has_many con condizione lambda
  • Rails 4 scope per trovare genitori senza figli