Vous essayez d'obtenir le code SQL suivant pour une requête Rails.Arel: Besoin d'aide pour convertir l'instruction SQL en code Arel pour Rails
la requête:
select addr.*
from addresses addr
join users u
on addr.addressable_type = 'User'
and addr.addressable_id = u.id
join customers c
on c.id = u.actable_id
and u.actable_type = 'Customer'
where c.account_id = 1
and c.site_contact = 't'
Ceci est mon code Rails:
# Inside my account.rb model
def site_addresses
a = Address.arel_table #Arel::Table.new(:addresses)
u = User.arel_table #Arel::Table.new(:users)
c = Customer.arel_table #Arel::Table.new(:customers)
# trying to debug/test by rendering the sql. Eventually, I want
# to return a relation array of addresses.
sql = Address.
joins(u).
on(a[:addressable_type].eq("User").and(a[:addressable_id].eq(u[:id]))).
joins(c).
on(c[:id].eq(u[:actable_id]).and(u[:actable_type].eq("Customer"))).
where(c[:account_id].eq(self.id).and(c[:site_contact].eq(true))).to_sql
raise sql.to_yaml #trying to debug, I'll remove this later
end
end
Je reçois des erreurs comme "classe inconnue: Arel :: Table". Im ne pas utiliser correctement Arel car le code SQL est valide (je peux courir sur la base de données très bien)
Vous n'avez pas besoin de créer un objet qui représente la table quelque part en premier? Comme: adresse = Arel :: Table.new (: adresse) dans votre méthode site_addresses? – bkunzi01