2014-07-03 14 views
18

alle Ich bin brandneu mit Ruby on Rails und ich muss etwas verstehen. Ich habe eine Instanzvariable (@users) und muss diese in einer html.erb-Datei beliebig oft durchlaufen. Früher habe ich das schon:Schleife in Ruby on Rails html.erb-Datei

<% @users.each do |users| %> 
    <%= do something %> 
<%end %> 

Aber ich muss es limitate des zu, sagen wir mal, 10-mal. Was kann ich tun?

+4

Können Sie nicht nur hinzufügen, '.limit (10) 'auf Ihre aktive Datensatzabfrage –

Antwort

16

Wenn @users mehr Elemente hat, als Sie wollen Schleife über, können Sie first oder slice:

Mit first

<% @users.first(10).each do |users| %> 
    <%= do something %> 
<% end %> 

Mit slice

<% @users.slice(0, 10).each do |users| %> 
    <%= do something %> 
<% end %> 

Wenn Sie jedoch tatsächlich nicht den Rest der Benutzer in der @users Array benötigen, sollten Sie nur so viele laden, wie Sie benötigen:

@users = User.limit(10) 
+0

Perfekt. Die anderen zwei Methoden werden nützlich sein, danke! –

3

Sie könnten

<% for i in 0..9 do %> 
    <%= @users[i].name %> 
<% end %> 

tun, aber wenn Sie nur 10 Benutzer in der Ansicht benötigen, dann können Sie es in der Steuerung beschränkt sich

@users = User.limit(10) 
+0

Dieses Limit in der Steuerung zu tun ist der richtige Ansatz. Stellen Sie sich vor, Sie haben 1 Million Benutzerdatensätze und Sie müssen nur 10 Benutzer anzeigen! Wenn die Datenbank aufgefordert wird, die Anzahl der zurückgegebenen Zeilen zu begrenzen, ist die Leistung der Datenbank und des Speichers besser. Wenn Sie eine gewisse Flexibilität in der Ansichtsdatei wünschen, können Sie den Controller bitten, beispielsweise 50 Benutzer zurückzugeben und die Ansicht auf 10 zu beschränken (eine variable Zahl unter 50). –

+0

Es wird als schlechte Übung in Ruby angesehen, For-Schleifen zu verwenden, sollte möglichst eine .each-Schleife verwenden. Wie die Antwort von Mohamed El Mahallawy zeigt. – user3505901

1

Warum Sie nicht über die Benutzer begrenzen?

<%= @users.limit(10).each do |user| %> 
... 
<%end%> 

Das würde immer noch ActiveRecord verwenden, damit Sie die Vorteile von AR-Funktionen erhalten. Sie können auch zu einer Reihe von Dingen tun, wie:

@users.first(10) oder @users.last(10)