2014-07-03 16 views
18

tutti Sono nuovo di zecca con Ruby on Rails e ho bisogno di capire qualcosa. Ho una variabile di istanza (@users) e ho bisogno di eseguire il ciclo su di esso in un file html.erb un numero limitato di volte. Ho già usato questo:Loop in file html.erb in Ruby on Rails

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

ma ho bisogno di Limitate a, diciamo, 10 volte. Cosa posso fare?

+4

si può non solo aggiungere '.limit (10) 'sulla query del record attivo –

risposta

16

Se @users ha più elementi di quanto si vuole ciclare su, è possibile utilizzare first o slice:

Utilizzando first

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

Utilizzando slice

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

Tuttavia, se in realtà non è necessario il resto degli utenti nella matrice @users, si dovrebbe caricare solo come molti come avete bisogno:

@users = User.limit(10) 
+0

Perfetto. Gli altri due metodi saranno utili, grazie! –

3

Si potrebbe fare

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

Ma se avete bisogno solo 10 utenti nella vista, quindi è possibile limitare nel controller stesso

@users = User.limit(10) 
+0

Il raggiungimento di questo limite nel controller è l'approccio corretto. Immagina di avere 1 milione di record utente e devi solo mostrare 10 utenti! Chiedendo al database di limitare il numero di righe restituite, si ottengono prestazioni migliori sul database e sull'utilizzo della memoria. Se si desidera una certa flessibilità nel file di visualizzazione, è possibile chiedere al controllore di restituire, ad esempio, 50 utenti e lasciare che la vista limiti a 10 (un numero variabile inferiore a 50). –

+0

In Ruby è considerata una cattiva pratica utilizzare i cicli For, se possibile, utilizzare un ciclo .each. Come dimostra la risposta di Mohamed El Mahallawy. – user3505901

1

Perché non si limitano gli utenti?

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

che sarebbe ancora usare ActiveRecord in modo da ottenere il beneficio di funzioni AR. È anche possibile fare una serie di cose anche come:

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