2017-09-13 1 views
0

Comment obtenir sql en condition unique?Rails activerecord où sql

Lead.where(status: 1).to_sql

SELECT `leads`.* FROM `leads` WHERE `leads`.`status` = 1

J'ai besoin que la condition sql. c'est-à-dire leads.`status` = 1

J'ai également une portée par défaut. A partir de ce que j'ai besoin seulement que la portée sql

+2

Je me sens comme il y a une information manquante de cette question. Qu'est-ce que vous essayez d'atteindre par cela? Si vous avez juste besoin du fragment SQL, vous pouvez facilement l'écrire en tant que chaîne. Si vous voulez exécuter le SQL, vous n'avez pas du tout besoin d'utiliser to_sql. – AJFaraday

+0

juste 'leads.status = 1' n'a pas de sens. Comment allez-vous interpréter les informations pour les jointures et les tables aliasées? – kiddorails

+0

@AJFaraday C'est juste un exemple. Je dois exécuter sql complexe. Mais en fonction du rôle de l'utilisateur, la portée va changer. J'ai donc besoin de convertir cette portée en sql. Alors seulement je peux ajouter cette portée SQL à mon SQL brut. –

Répondre

1

Vous pouvez utiliser Arel::SelectManager#where_sql:

>> Lead.where(status: 1).arel.where_sql 
=> "WHERE \"leads\".\"status\" = $1" 
+0

est-il une option pour obtenir que la chaîne de condition sans ** ** OÙ –

+0

Vous pouvez écrire un visiteur personnalisé pour le faire: https://gist.github.com/tcopeland/9715f83c7cb516209491996bf2442476 –