2017-02-15 2 views
-1

Ich habe das Artikelmodell und das ArticleLike-Modell, das den Benutzer aufnimmt, mag den Artikel oder nicht.orders_to on ActiveRecord von Rails erzeugt viele Anfragen

Das articleLike Modell gehört zur Art und die Definition ist wie folgt

class ArticleLike < ApplicationRecord 
    belongs_to :article 
end 

Wenn ich ArticleLike.where verwenden (: article_id: XXX), Active wird eine rohe Abfrage wie

SELECT * FROM article WHERE article_id = XXX 
senden

Ist es möglich ActiveRecord zu vermeiden, diese rohe Abfrage an meine DB zu senden? Manchmal muss ich nur einige Felder auswählen, die keinen Join benötigen, aber Activetrecord fügt immer die Tabellen hinzu (includes), wenn ich im Modell "ostens_to" festlege.

Vielen Dank.

+1

einfach 'ArticleLike.where (: article_id: XXX)' sollte die Abfrage nicht tun Sie erwähnen. Könnten Sie 'ArticleLike.where (: article_id: XXX) .to_sql' ausführen und uns das Ergebnis anzeigen? – Leito

+0

Entschuldigung. Ich habe festgestellt, dass die Abfrage gesendet wurde, weil ich das Modell neu lade und speichere. Wenn meine Article-Tabelle viele Spalten hat, ist es möglich, die Verwendung von SELECT * für die Überprüfung von Fremdschlüsseln zu vermeiden? Ich denke, es muss nur SELECT ID FROM Artikel verwenden, um die Konsistenz zu überprüfen. Vielen Dank. –

+0

Haben Sie Validierungen, die diese Abfrage auslösen? Da es sich um die Frage handelt, sollte ein Artikel nicht gespeichert werden. Bitte aktualisieren Sie Ihre Frage, um die neuesten Erkenntnisse und Fragen zu berücksichtigen. – Leito

Antwort

-1

Ich denke find_by_sql kann lösen, was Sie versuchen zu bekommen.

1

Ja, Sie können die Anzahl der Spalten reduzieren, indem Sie entweder select oder pluck verwenden (abhängig davon, ob Sie mehrere oder nur eine Spalte haben möchten).

zB:

ArticleLike.where(:article_id: XXX).pluck(:id) 
=> ['123', '456'] 
ArticleLike.where(:article_id: XXX).pluck(:id).to_sql 
=> "SELECT id FROM article WHERE article_id = XXX" 

ArticleLike.where(:article_id: XXX).select("column_1, column_2").to_sql 
=> "SELECT column_1, column_2 FROM article WHERE article_id = XXX" 

Weitere Einzelheiten über Active Record-Abfrage-Schnittstelle zu verwenden, ist hier: http://guides.rubyonrails.org/active_record_querying.html

Verwandte Themen