2011-11-13 3 views
0

Je me bats pour amalgamer ces deux déclarations. Je travaille sur une application d'événement. Je voudrais empêcher mes utilisateurs de publier eux-mêmes les événements. Pour ce faire, j'ai un champ dans ma table appelée "Etat" et j'utilise également la gemme géocoder.Rails Contrôleur - Temps, condition et géocoder Gem

def index 
if params[:search].present? 
    @events = Event.near(params[:search], 50, :order => :distance).where(:state => ['3', '4']) 
    else 
    @events = Event.where('until > ?', Time.zone.now) 
    end 
end 

Je voudrais faire ....

def index 


if params[:search].present? 
    @events = Event.near(params[:search], 50, :order => :distance).where(:state => ['3', '4']) 
    else 
    @events = Event.where('until > ?', Time.zone.now, :state => ['3', '4']) 
    end 
end 

mais je reçois une erreur

ActiveRecord::PreparedStatementInvalid in EventsController#index 

wrong number of bind variables (2 for 1) in: until > ? 

Pouvez-vous s'il vous plaît aider .....

Répondre

4

Vous avoir un seul espace réservé '?', mais vous fournissez deux arguments. Vous pourriez faire:

@events = Event.where('until > :time and state in :state', {:time => Time.zone.now, :state => ['3', '4']}) 

ou

@events = Event.where('until > ?', Time.zone.now).where(:state => ['3', '4']) 

ou

@events = Event.where(:until.gt => Time.zone.now, :state => ['3', '4']) 
+0

merci beaucoup, je suis en utilisant le second. Fonctionne bien. Passez une bonne journée. – Benjamin