Non riesco a capire come utilizzare il metodo .where()
per recuperare i dati del modello associati. In questo esempio, Progetti belongs_to utenti ...Rails 4: Come usare includes() con where() per recuperare gli oggetti associati
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
In App/views/progetti/invite.html.erg <%= debug(@project) %>
rendimenti:
--- !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'
Nel caso non l'utente hash/array associati essere inclusi in questo? So che potrei aggiungerlo manualmente chiamando un secondo find
/where
(@project.user = User.where({:id=>@project.belongs_to}
) ma questo non sembra "The Rails Way". Cosa è?
Soluzione mia domanda iniziale è stata formulata in base al presupposto errato che debug()
sarebbero tornati gli oggetti associati (questo funziona in cakePHP perché impacchetta tutto in array).
Quindi il mio codice originale dovrebbe funzionare. Tuttavia, avevo erroneamente chiamato la chiave esterna archiviata nella tabella. Mi sono confuso osservando il metodo di migrazione t.belongs_to
(che crea automaticamente il campo foreign_key con nome corretto, non un campo denominato "appartiene a"). Così ho anche dovuto rinominare quella colonna su user_id
e ora funziona esattamente come descritto nella risposta di @ Veraticus qui sotto.
Che cosa stai cercando mostrare? Intendi che vuoi che l'output di debug mostri @ project.user? O stai dicendo che i tuoi 'where' e' includes' non stanno funzionando? Se vuoi mostrare l'associazione 'utente' per il debug, hai provato' <% = debug (@ project.user)%> 'senza eseguire' user.where ... '? – lurker
se un solo oggetto di progetto include non ha senso per me.include senso quando diversi progetti sono selezionati e vuoi caricare tutti i rispettivi utenti in una sola query, è quello che stavi facendo? o come stai usando 'include', spero che ti ricordi – juanpastas
Le risposte non producono più una singola query, ma questo approccio funziona: http://blog.arkency.com/2013/12/rails4-preloading/ – hakunin