Solo obtenga información en incrementos para el bucle de Rails

Dado el siguiente código:

var photos = [
<% current_app_user.photos.each do |photo| %>
{ url: "<%= photo.thumbnail_uri(400, 189) %>", title: "<%= truncate(photo.name, 65) %>", path :"<%= photo_path(photo) %>" },
<% end %>
];

¿Cómo lo modificaría para sacar solo 10 fotos a la vez?

Inicialmente, me gustaría generar 10, luego con el clic de un botón agregar 10 más y así sucesivamente.

preguntado el 12 de junio de 12 a las 21:06

2 Respuestas

Deberías hacer esto en un controlador, no en tu vista, pero dentro de un controlador deberías hacerlo así:

@photos = current_app_user.photos.all(:limit => 10).map do |p| 
  { :url => p.thumbnail_uri(400, 189),
    :title => p.name,
    :path => photo_path(p) }
end

Y en tu opinión:

var photos = <%= @photos.to_json %>;

No hay código en su opinión que no sea lo estrictamente necesario :)

Respondido el 12 de junio de 12 a las 21:06

esto está funcionando muy bien. Muchas gracias. Si quisiera tomar los siguientes 10 y agregarlos a las fotos var, ¿cómo lo haría con solo hacer clic en un botón? - webbydevy

Tendrías que hacer una llamada ajax y también tendrías que paginar estos resultados usando una gema como will_paginate o kaminari. - Mauricio Linhares

Maldición. Ok. el json en realidad está siendo utilizado por jcarousel, por lo que realmente no puede usar will_paginate. Esperaba evitar will_paginate haciendo una llamada AJAX en el siguiente evento de clic de botón. ¿Algunas ideas? Su ayuda es muy apreciada. He estado mirando esto por mucho tiempo. - webbydevy

no puede hacer una llamada ajax para obtener los siguientes 10 elementos si no sabe en qué página se encuentra, de ahí la necesidad de usar una gema como will_paginate. - Mauricio Linhares

Si solo desea 10 resultados, simplemente puede usar el método de límite:

current_app_user.photos.limit(10).each { |photo| # etc... }

Si necesita obtener todas las fotos pero dividirlas en bloques de 10 y está usando jQuery, podría hacer esto código que creé que agrega un each_slice Función para el objeto principal de jQuery. Podría ser útil en esta situación.

Respondido el 12 de junio de 12 a las 21:06

obteniendo un método indefinido 'límite'. también, ¿cómo agregaría a las fotos con el clic de un botón? Además, estoy usando Rails 2.3.8. - webbydevy

Que tipo de objeto es current_app_user.photos? Si es una matriz, entonces usted debemos tienen el limit método disponible. - kyle decot

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.