Se le foto sono ActiveRecord oggetti è necessario utilizzare un scope per generare la query appropriata per i dati esatti necessari. Altrimenti, Rails caricherà tutte le foto invece del sottoinsieme di cui hai bisogno. Supponendo che le vostre foto record hanno un singolo attributo di tag, si può fare qualcosa di simile al seguente:
class Photo < ApplicationRecord
scope :with_tag, (tag) -> { where(tag: tag) }
end
Nel vostro controller avresti solo bisogno la chiamata che portata dal ambiti di ActiveRecord restituire un #all
ambito se sono forniti senza parametri:
render json: Photo.with_tag(params[:tag])
# Equivalent when params[:tag] is nil
render json: Photo.all
Ora dicono che non a che fare con oggetti ActiveRecord. Diciamo che hanno una vasta gamma di hash:
photos = [{ name: '1.jpg', tag: 'flower'}, ... ]
È possibile creare un metodo di supporto per eseguire il filtraggio:
class PhotosController < ApplicationController
def index
photos = [{ name: '1.jpg', tag: 'flower'}, ... ]
render json: select_photos_by_tag(photos, params[:tag])
end
private
def select_photos_by_tag(photos, tag)
if tag
photos.select { |photo| photo[:tag] == tag }
else
photos
end
end
end
che tipo di condizioni potrebbe essere? Forse uno scope potrebbe essere una buona soluzione? – Albin
Avrei dovuto specificare che collection_of_photos è un array di hash. La condizione è selezionare le foto con il tag corrispondente. La risposta fornita da @faraz risolve il problema. Cercherò sicuramente gli ambiti per l'uso futuro quando si tratta di oggetti ActiveRecord. –