0

データベースからテーブルにフィルターされたパラメーターを含むテーブルを一覧表示したいと考えています。それらにデフォルトのパラメーターを割り当てますが、エラーが発生します: 引数の数が間違っています (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, )}

コントローラーで:

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

ビューで:

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

2 に答える 2

3

まあ、あなたはあなたのフィルターメソッドにパラメータを渡す必要があります

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

スコープを次のように定義できます。

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

値のデフォルトを設定するため。ただし、パラメーターが設定されている場合にデフォルトをオーバーライドするように、パラメーターを渡す必要があります (nil を返す場合でも)。

于 2012-04-25T13:56:22.973 に答える
2
@companies = Company.filtered( !!! )

あなたはそこを通過する必要がありますcount_min, count_max, city, company_status

于 2012-04-25T13:55:52.337 に答える