Rails 4: Verwendung von includes () mit where () zum Abrufen zugeordneter Objekte
Ich kann nicht herausfinden, wie ich die.where()
Methode zum Abrufen der zugehörigen Modelldaten. In diesem Beispiel gehört Projekte Benutzern ...
class Project < ActiveRecord::Base
belongs_to :user
has_many :videos
end
class User < ActiveRecord::Base
has_many :projects
end
class ProjectsController < ApplicationController
def invite
@project = Project.includes([:user]).where( {:hashed_id=>params[:id]} ).first
end
end
In App / views / projects / invite.html.erg<%= debug( @project ) %>
kehrt zurück:
--- !ruby/object:Project
attributes:
id: 22
name: Some Project Name
belongs_to: 1
instructions: Bla bla bla
active: true
max_duration: 2
max_videos:
created_at: 2013-08-26 15:56:50.000000000 Z
updated_at: 2013-08-26 15:56:50.000000000 Z
hashed_id: '1377532589'
Sollte der zugehörige User-Hash / Array nicht mit einbezogen werden? Ich weiß, dass ich es manuell hinzufügen kann, indem ich eine Sekunde anrufefind
/where
( @project.user = User.where( {:id=>@project.belongs_to}
), aber das fühlt sich nicht wie "The Rails Way" an. Was ist?
Lösung Meine ursprüngliche Frage wurde unter der falschen Annahme formuliert, dassdebug()
würde zugehörige Objekte zurückgeben (dies funktioniert in cakePHP, weil es alles in Arrays bündelt).
Also mein Originalcodesollte Arbeit. Ich hatte jedoch den in der Tabelle abgelegten Fremdschlüssel falsch benannt. Ich war verwirrt, als ich mir die Migrationsmethode ansaht.belongs_to
(das automatisch das richtig benannte foreign_key Feld erzeugt,nicht ein Feld mit dem Namen "belong_to"). Also musste ich diese Spalte auch in umbenennenuser_id
und jetzt funktioniert es genau so, wie es in der Antwort von @ Veraticus unten beschrieben ist.