如果照片是ActiveRecord對象應使用scope爲您生成所需的確切數據適當的查詢。否則,Rails將加載所有的照片,而不是你需要的子集。假設你的照片記錄了一個標籤屬性,你可以做類似如下:
class Photo < ApplicationRecord
scope :with_tag, (tag) -> { where(tag: tag) }
end
在你的控制你只需要調用自ActiveRecord的作用域範圍返回#all
範圍,如果沒有提供參數:
render json: Photo.with_tag(params[:tag])
# Equivalent when params[:tag] is nil
render json: Photo.all
現在說你不處理ActiveRecord對象。假設你有一個散列的數組:
photos = [{ name: '1.jpg', tag: 'flower'}, ... ]
您可以創建一個輔助方法來進行過濾:
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
來源
2016-07-08 19:59:53
fny
它可能是什麼樣的條件?也許範圍可能是一個很好的解決方案? – Albin
我應該指定collection_of_photos是散列數組。條件是選擇具有匹配標記的照片。 @faraz提供的答案解決了這個問題。在處理ActiveRecord對象時,我一定會考慮將來使用的範圍。 –