2013-10-07 7 views
27

Hier finden ist mein ControllerVerein named nicht vielleicht falsch geschriebene Ausgabe in Schienen Verein

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

Mein Beitrag Modell

belongs_to :customer 

Mein Kundenmodell

has_many :posts 

Und ich bin immer Fehler wie

Dies ist mein Controller-Ausgang:

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' 

Antwort

59

Dies ist ein typischer Tippfehler:

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

Da Sie die Beziehung wie folgt aus (mit Singular) definiert:

# Post model 
belongs_to :customer 

Einige Sachen zu wissen:

  • Im joins/includes Methode, verwenden Sie immer exakt die gleichen Namen wie die Beziehung
  • In den where Klauseln immer die plurale Namen der Beziehung (eigentlich Namen der Tabelle des, die standardmäßig ist das Modell in mehreren Namen, aber auch manuell eingestellt werden kann)

Beispiele:

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

ähnliche Fragen:

+1

yae seine Arbeiten. – overflow

+0

Ok, jetzt brauche ich noch eine Klarstellung. Ich habe 'created_at' an beiden Tischen. Ich benötige beide Daten (d. H. "Registrierungsdatum" und "Post Date"). Wie kann ich es bekommen? – overflow

+0

Dies ist eine andere Frage, die nicht mit dieser Frage verbunden ist, erstellen Sie eine andere Frage auf Stackoverflow, wenn Sie möchten. (Aber normalerweise verwenden Sie 'post.created_at', um den Wert created_at einer Post-Instanz zu erhalten) – MrYoshiji