2011-09-21 3 views
1

Mise à jour

Je suis en train de faire est de sélectionner des colonnes spécifiques et utiliser des alias sur eux, et l'utiliser dans un named_scope. Je veux utiliser des alias parce que plus tard, je vais utiliser cela comme une idée lorsque j'essaie de rejoindre plusieurs tables, en fonction du code SQL que j'ai créé.named_scope ne montre pas les colonnes correctes

Modifier: Im en cours d'exécution dans Rails 2.3.8 et Ruby 1.8.7


Voici mon named_scope ...

named_scope :prog_result,:select => "users.id AS 'user_id', users.username AS 'username', users.lastname AS 'lastname', users.firstname AS 'firstname', departments.name AS 'department', versions.number AS 'version'", 
         :joins => {:department => :version} 

Et quand je tente de l'appeler en console User.prog_result le résultat est ceci ...

[#<User username: "respondent1", lastname: "res", firstname: "pon">, #<User username: "2222", lastname: "Numero", firstname: "Dos">] 

User.prog_result.find(2) 2 est l'identifiant de l'utilisateur « respondent1 », le résultat de cette User.prog_result.inspect est

"[#<User username: \"respondent1\", lastname: \"res\", firstname: \"pon\">, #<User username: \"2222\", lastname: \"Numero\", firstname: \"Dos\">]" 

Quelqu'un peut-il me dire ce que je fais mal? ..

Répondre

1

Lorsque vous appelez User.prog_result dans la console, vous appelez vraiment User.prog_result.inspect La console affiche le résultat en appelant #inspect sur l'objet résultat.

Si à la place vous appeliez User.prog_result.class dans la console, vous verriez qu'il s'agissait d'un ActiveRecord::NamedScope::Scope.

Si vous piquez à l'intérieur de ces objets retournés, vous trouverez probablement ce que vous attendez.

User.prog_result.first.department => first joined department.name 
User.prog_result.last.version => last joined version.number 

Les deux champs nommés et passant :joins, :conditions et :select sont déconseillés dans Rails 3.1, donc vous ne devriez probablement pas du développement de code avec eux, sauf si vous êtes sur Rails 2.3.x. Vous voudrez faire quelque chose comme ceci:

User.joins(:department => :version). 
select("users.id AS 'user_id', users.username AS 'username', users.lastname AS 'lastname', users.firstname AS 'firstname', departments.name AS 'department', versions.number AS 'version'") 
+0

Désolé à ce sujet !, je cours Rails 2.3.8 J'ai édité ma question. Vous avez raison sur 'User.prog_result.class', il retourne' ActiveRecord :: NamedScope :: Scope' dans la console, et aussi sur piquer dedans. Mais quand j'ai essayé d'obtenir le département, il retourne "nil" idk pourquoi, mais avec mon code précédent, j'ai utilisé 'User.find_by_sql()' j'ai eu leurs ministères .. – jovhenni19

1

Je ne suis pas sûr de votre quitter question, Mais je suppose que vous regardez un objet utilisateur et rails renvoie un tableau.

Si c'est le cas, named_scope retournera toujours un tableau (comme vous le faites une User.find_all())

même s'il n'y a qu'un seul enregistrement

espoir que je suis votre bonne question ..

Merci et salutations

Sameera

Questions connexes