2

Ich kann nicht den richtigen Weg, um diese in das Statement für meinen Controller in einer Zeile zu schreiben herauszufinden.korrekte Art und Weise zu schreiben, wo Aussage mit Array von Werten

Was fehlt mir hier?

@food_ranks = FoodRank.where("user_id = ? AND rank = ?", current_user.id, [0, 1, 2]) 

Hier ist mein Versuch, es in 3 Zeilen zu schreiben.

@food_ranks = Array.new(FoodRank.where("user_id = #{current_user.id} AND rank = 0")) 
@food_ranks << FoodRank.where("user_id = #{current_user.id} AND rank = 1") 
@food_ranks << FoodRank.where("user_id = #{current_user.id} AND rank = 2") 

@food_ranks zeigt die Objekte korrekt an. Warum lässt es mich jetzt nicht so etwas tun?

@food_rank each do |rank| 
    rank.user_id 
end 

macht es @food_ranks wahrsten Sinne des Wortes die where Aussage? (Undefined Methode)

Antwort

5

auf diese Weise versuchen:

@food_ranks = FoodRank.where("user_id = ? AND rank IN (?)", current_user.id, [0, 1, 2]) 

Sie können auch tun:

@food_ranks = FoodRank.where(user_id: current_user.id, rank: [0, 1, 2]) 
+1

Sie müssen nicht schreiben 'Rang IN (?)' Für die oberen, Rails wird es für Sie generiert. –

+0

Ich denke, für die erste Abfrage wird das immer noch benötigt. Für die zweite brauchst du das nicht. Deshalb habe ich in der 2. Abfrage nicht 'IN' verwendet, Rails wird das automatisch tun. –

1

Das Problem ist, dass Sie in einem Array sind vorbei, und zu versuchen, Rang zu, dass zu vergleichen.

Versuchen Sie es wie so zu ändern:

FoodRank.where("user_id = ?", current_user.id, rank: [0, 1, 2]) 

Rails wird die SQL-Anweisung IN aus dem Array automatisch generieren, so dass keine Notwendigkeit, dass zu spezifizieren.