2013-07-01 1 views
0

Je construis un gestionnaire d'annonce qui a le schéma suivant:requête pour trouver des annonces « actifs » dans Rails

<Campaign id: nil, target_id: nil, date_view_based: nil, start_date: nil, end_date: nil, max_views: nil, cur_views: nil, link_to: nil, alt_data: nil, title_attr: nil, created_at: nil, updated_at: nil, user_id: nil, image_file_name: nil, image_content_type: nil, image_file_size: nil, image_updated_at: nil, link_clicked: nil, name: nil> 

Ce que je besoin est un moyen de créer une méthode qui fonctionnera comme ça ...

Campaigns.current? 

Et la sortie d'un tableau de quelque chose comme ça

Campaign.where('date_view_based =? AND end_date >= ? AND start_date <= ?', "Date", Date.today.strftime('%m/%d/%Y'), Date.today.strftime('%m/%d/%Y')).concat(Campaign.where('date_view_based = ? AND max_views >= ?, "View", :cur_views)) 

Cependant, le Campaign.where('max_views >= ?, :cur_views) ne fonctionne pas, alors comment c un je compare ces deux attributs? Sûrement il doit y avoir une meilleure façon de le faire toutes les suggestions seraient appréciées.

Désolé je croyais avoir compris la structure mais je suppose que je ne l'ai pas: Campaign.new: retours

#<Campaign id: nil, target_id: nil, date_view_based: nil, start_date: nil, end_date: nil, max_views: nil, cur_views: nil, created_at: nil, updated_at: nil, name: nil> 
+0

Puisque votre instruction where utilise SQL plutôt que Ruby, veillez à utiliser single = au lieu de double ==. – Rebitzele

+0

Merci d'avoir attrapé ma faute de frappe. Oui, c'est juste un = est-il un moyen d'interroger cela dans Ruby qui le rendrait plus facile? –

Répondre

1

Comment cela?

class Campaign < ActiveRecord::Base 

    # ... 

    def self.current 
    date_view_based_enum = %W(Date View) 
    date = Date.today.strftime('%m/%d/%Y') 
    where("((start_date <= ? AND end_date >= ?) OR (max_views >= cur_views)) AND date_view_based IN (?)", date, date, date_view_based_enum) 
    end 
end 
+0

Parfait! Exactement ce que je cherchais! –

Questions connexes