2012-04-25 4 views
0

Je souhaite répertorier une table avec des paramètres filtrés de la base de données à la table. Je cède les paramètres par défaut pour eux, mais je reçois l'erreur: nombre incorrect d'arguments (0 pour 4)mauvais nombre d'arguments (0 pour 4) Où est-ce que je me suis trompé?

Dans mon modèle:

class Company < ActiveRecord::Base 

scope :filtered, lambda {|count_min, count_max, city, company_status| where(:company_status => company_status, :ap_veh_count => count_min..count_max, :office_adress_city => city,)} 

Contrôleur:

class LeadsController < ApplicationController 

before_filter :confirm_logged_in 

def list 
     params[:sort] ||= "name" 
     params[:direction] ||= "asc" 
     params[:company_status] ||= "3" 
     params[:count_min] ||= "8" 
     params[:count_max] ||= "20" 
     params[:city] ||= "Rīga" 
     @companies = Company.filtered.order(params[:sort] + " " + params[:direction]) 
end 

Vu:

<% @companies.each_with_index do |company, i| %> 
<tr> 
    <td><%= i + 1 %></td> 
    <td><%= company.ap_veh_count %></td> 
    <td><%= link_to company.name, {:action => 'view', :id => company.id} %></td> 
    <td><%= company.office_adress_city %></td> 
    <td><%= company.phone %></td> 
    <td><%= company.company_field %></td> 
    <td><%= company.email %></td> 
    <td><%= 'taisīt' %></td> 
    <td><%= link_to "Atlasīt", {}, :class => 'btn btn-success btn-mini' %></td> 

</tr> 
<% end %> 

Répondre

3

Eh bien, vous devez passer les params à votre méthode de filtre à

@companies = Company.filtered(params[:count_min], params[:count_max], etc.).order... 

Vous pouvez définir votre champ comme:

scope :filtered, lambda { |*args| 
    count_min = args.shift || 8 
    count_max = args.shift || 20 
    city = args.shift || "Rīga" 
    company_status = args.shift || 3 

    where(
    :count_min = count_min, 
    :count_max = count_max, 
    :city = city, 
    :company_status => company_status 
) 
} 

Afin d'avoir les valeurs par défaut pour vos valeurs. Mais vous devez toujours passer les params (même s'ils reviennent nuls) de sorte que dans le cas où ils un ensemble, ils remplaceraient les paramètres par défaut.

+0

Peut-être pouvez-vous m'aider à définir par défaut toutes les valeurs? :) – kipeens

+0

Bien sûr, j'ai mis à jour la réponse. – moritz

+0

OK, mais je dois encore mettre des valeurs par défaut. Je veux qu'il filtre toutes les valeurs possibles de cette colonne de DB – kipeens

2
@companies = Company.filtered(!!!) 

vous devriez y passer count_min, count_max, city, company_status

Questions connexes