2017-12-30 6 views
0

Das ist seit Jahren ein verwirrendes Thema für mich, und ich habe nie danach gefragt. Warum kann ich name in der folgenden Konsolenausgabe nicht sehen, obwohl ich es klar ausgewählt habe?Wie zeige ich in der Rails-Konsole alle sql ausgewählten Attribute an?

enter image description here

Wenn ich zuweisen, dass die Ausgabe auf eine Variable und relation.first.name sagen, dass ich den Namen, aber ich kann nicht den Namen in der Konsole zu zeigen, erhalten. Auch wenn ich den Active Bezug auf ein Array umwandeln, sehe ich ein ähnliches Problem:

2.3.5 :070 > a.first 
#<ActsAsTaggableOn::Tagging:0x00007ff9f3779aa8> { 
    :id => 139 
} 
2.3.5 :071 > a.first.name 
"phones" 

Gibt es eine bessere Art und Weise damit zu umgehen? Im Moment kann alles, was ich Figur ist dies abzubilden es sichtbar zu machen, die machen schriftlich einen Schmerz fragt:

a.map{|tag| [tag.id, tag.name]}

Antwort

1

a.first.attributes

Sie können auch .attributes['column_name'] verwenden die extrahieren gewünschte Information, ohne auf die Punktsyntax angewiesen zu sein, was zu unerwarteten Ergebnissen führen kann.

+0

Ich hoffe, dass ich eine Möglichkeit hatte, das Ergebnis automatisch einem lesbaren Array zuzuordnen, ohne die Beziehungselemente einzeln untersuchen zu müssen. – Abram

+0

Wenn Sie versuchen, es in STDOUT lesbar zu machen, würde ich persönlich etwas in der Art von 'puts JSON.pretty_generate a.first.attributes.to_h' tun. –

+0

Wenn Sie zuerst sagen, das ist nur ein Blick Element der Beziehung wieder. – Abram

0

Da Sie ActsAsTaggableOn::Tagging verwenden, um Ihre Abfrage auszuführen, zeigt die Konsole nur die Attribute an, die sie über ActsAsTaggableOn::Tagging kennt. Ich nehme an, dass dieses Modell kein name Attribut hat, also weiß es nicht, es zu zeigen.

Ich glaube, die Ergebnisse der Abfrage sind auch ein bisschen verwirrend. Die Abfrage zeigt ActsAsTaggableOn::Tagging, aber ich denke, es zeigt die ID für das Tag.

Da Sie versuchen, nach Tags abzufragen, würde ich vielleicht Ihre Abfrage wechseln, wenn es eine Option ist. Ich weiß nicht genau, was Sie erreichen wollen, also mache ich eine Vermutung. Zum Beispiel, hier ist was ich versuchen würde:

Tag.joins(:taggings).where(:"taggings.context" => "topics") 

Dadurch kann die auf diese Weise verbinden, werden Sie immer noch Zugriff auf alle der Markierungen haben Sie suchen; Sie erhalten jedoch alle Tag-Attribute angezeigt, wie Sie möchten.

+0

Danke, das ist hilfreich, aber ich denke, ich habe über ein generelles Problem gesprochen, das mehr mit der Art zusammenhängt, wie Select mit aktiven Datensatzbeziehungen arbeitet. – Abram

0

Verwenden Sie .pluck() anstelle von .select(). Dann haben Sie keine Zwischenobjekte, die die Spalte name nicht kennen.

Verwandte Themen