2012-04-25 14 views
0

データベースからテーブルにフィルタリングされたパラメータを持つテーブルをリストしたいとします。私は彼らにデフォルトパラメータを割り当てるが、私はエラーを取得:ビューで引数が間違っています(0の場合は4)どこが間違っていますか?

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 

:私のモデルでは、引数の数が間違って(4 0)

コントローラで
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,)} 

<% @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 %> 

答えて

3

さて、あなたはあなたのようにあなたの範囲を定義することもできます

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

であなたのフィルタメソッドにのparamsを渡す必要があります。しかし、パラメータを渡す必要があります(たとえそれらがnilを返しても)、セットの場合はデフォルトをオーバーライドします。

+0

デフォルトではすべての値を持つように定義することもできますか? :) – kipeens

+0

確かに、私は答えを更新しました。 – moritz

+0

でも、私はまだいくつかのデフォルト値を入れなければなりません。私はそれがDBのその列からすべての可能な値をフィルタリングしたい – kipeens

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

あなたがそこにを渡す必要があります自分の価値観のデフォルト値を持つために

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 
) 
}