J'ai le code suivant Wich renvoie une erreur avec Rails 3:convertir named_scope pour rails 3
Lorsqu'il est appelé l'erreur suivante apparaît:
Mysql2::Error: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '2053809816 AND audition_tags.audition_id = auditions.id)) ORDER BY auditions.cr' at line 1: SELECT `auditions`.* FROM `auditions` WHERE (NOT EXISTS (SELECT * FROM audition_tags WHERE audition_tags.user_id = '#<ActiveRecord::Relation:0x104ee3c20>',2053809816 AND audition_tags.audition_id = auditions.id)) ORDER BY auditions.created_at DESC LIMIT 0, 10
Comme vous pouvez le voir est comme user_id est maintenant une table contenant un objet ActiveRelation et bien ... mon user_id
Je ne comprends pas ce qui se passe ... avez-vous une idée?
Merci
mise à jour: est ici la sortie SQL complète:
SELECT `auditions`.* FROM `auditions` WHERE (NOT EXISTS (SELECT * FROM audition_tags as bar WHERE bar.user_id = '#<ActiveRecord::Relation:0x104aa6c48>',2053809816 AND bar.audition_id = auditions.id)) ORDER BY auditions.created_at DESC LIMIT 0, 10
Update2: est ici le code appelant mon champ https://gist.github.com/ddddfeddf70264a81289
Update3: comme vous pouvez le voir dans mon essentiel les portées chaînées sont appelées avec un "appel":
scopes.inject(self) {|m,v| m.scopes[v[0]].call(m, v[1]) }
Si je me connecte l'user_id envoyé c'est un FIXNUM pas un tableau:
scopes.inject(self) do |m,v|
logger.info ">>> SCOPE : #{v[0].inspect} | ARG : #{v[1].inspect} | ARG CLASS : #{v[1].class.inspect} <<<"
m.scopes[v[0]].call(m, v[1])
end
Le problème est plus précis maintenant: j'envoyer un Fixnum comme argument à mon named_scope mais obtenu sur la sortie d'un tableau de Type: [ActiveRecord :: Relation, FIXNUM]
Update4: enfin je trouve la solution (mais ne sais pas pourquoi ???)
j'ai remplacé "appel" par "envoyer" et wo rks ...
results = scopes.inject(self) do |combined_scope, scope|
combined_scope.send(scope[0], scope[1])
end
Merci à tous pour votre aide!
Je ne sais pas, mais ne devrait pas 'DE audition_tags bar WHERE' être' DE audition_tags AS bar WHERE' - Avis de la 'AS' – Ariejan
Non, vous ne devez pas, autant que je sache, il est facultatif – Mike
Comment le SQL complet est-il généré? – shingara