2015-08-10 4 views
0

J'essaie de mettre en œuvre une fonction de recherche simple qui déclenche un certain nombre d'erreur d'argument. Ici Mes vuesFonction de recherche mauvais numéro d'argument (2 pour 1)

<%= form_tag(clients_path, :method => "get", id: "search-form") do %> 
<%= text_field_tag :search, params[:search], placeholder: "Search Clients" %> 
<%= submit_tag "Search", :name => nil %> 
<% end %> 

La méthode dans mon contrôleur

def index 
if current_user.admin? 
    if params[:search] 
    @clients = Client.search(params[:search], load:true).result 
    else 
    @clients = Client.all.paginate(:per_page => 3, :page => params[:page]) 
    end 
else 
    @clients = current_user.clients 
end 
end 

Mon modèle

def self.search(query) 
    where("name like ?","%#{query}%") 
end 

je reçois le message d'erreur "nombre erroné d'arguments (2 pour 1)". Je ne vois pas quel est l'autre argument passé au modèle. Une nouvelle paire d'yeux aidera. Merci.

Répondre

0

Votre méthode permet search un seul argument:

def self.search(query) 
    where("name like ?","%#{query}%") 
end 

Mais vous essayez de l'utiliser avec 2:

@clients = Client.search(params[:search], load:true).result 
             # ^^^^^^^^^^^ second argument 
+0

Merci, mais maintenant il déclenche un autre problème (méthode non définie 'result 'pour # ). – Bastien

+0

donc, supprimer '.result' de' Client.search (params [: search], charger: true) .result' ce qu'il devrait être faire? –

+0

Je l'ai utilisé initialement pour corriger un bug avec will_paginate qui déclenchait une méthode non définie total_pages. Je l'ai enlevé et ai enlevé ma pagination avec will_paginate et essaye de trouver une autre manière de paginer mon application. Merci. – Bastien

0

En fait, vous allez passer deux paramètres. Mais dans Model, il suffit de prendre un seul paramètre.

def self.search(query) 
    where("name like ?","%#{query}%") 
end 

Vous devez accéder à load: true dans la méthode du modèle.

def self.search(query, load) 
    where("name like ?","%#{query}%") 
end 

ou en fonction de vos besoins.

+0

À quoi bon poster une même réponse que la mienne? –