Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- class MediaAsset < ApplicationRecord
- @@filters = {
- query: -> (search_term) { where("name like ?", "%#{search_term}%") },
- tag_ids: -> (tag_ids) { includes(:tags).where(tags: { id: tag_ids }) },
- campaign_id: -> (campaign_id) { joins(:campaigns).where(campaigns: { id: campaign_id }).distinct },
- broadcast_date_start: -> (start_date) {where("broadcast_date >= ?", start_date.to_datetime) },
- broadcast_date_end: -> (end_date) { where("broadcast_date <= ?", end_date.to_datetime) },
- size: -> (size) { limit(size) },
- #media_type: -> (type="video") { scope_by_media_type(media_type) }
- }
- def self.search_by(search_params)
- media_type = search_params.delete(:media_type) || "video"
- filters = [scope_by_media_type(media_type)]
- search_params.each_pair do |filter_name, argument|
- filter = @@filters.fetch(filter_name, none)
- filters << filter.call(argument)
- end
- filters.reduce(:merge)
- end
- end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement