2011-10-08 85 views
1

簡介: 我正在一個汽車經銷商的應用程序,所以我有一個名爲汽車carname_id和carmodel_id字段的表。 carname_id和carmodel_id取自兩個名爲carnames和carmodels的表格,我保留所有車名和車型。現在我已經建立了這些模型,以便我可以讓它們處於關係中,類似於belongs_to和has_many(不相關,因爲它的工作原理應該是這樣 - 我可以從選擇列表中將汽車和車型添加到新車上)Meta_Search undefined方法錯誤

我使用meta_search許多字段進行搜索,並在search_form代碼看起來像他

<%= f.label :make_contains, "Select Car Make" %> 
<%= f.select :make_contains, Car::CAR_MAKE %> 

<%= f.label :model_contains, "Select Model" %> 
<%= f.text_field :model_contains, Car::CAR_MODEL %> 

的品牌和型號字段是舊的Fileds在我用來存放汽車和型號名稱的汽車表的一輛車。但是,當我進入高級搜索表單時,我發現自己在選擇動態模型列表時遇到了困難。我在car.rb中列出了爲汽車列表指定的汽車名稱和汽車模型列表。我同意這是不是最好的辦法,這就是爲什麼我必須創建兩個表:汽車名稱和汽車模型,我已經告訴你在一開始..我已經設置了一切,並添加新車按預期工作,我可以選擇一個carname_id從carnames表和carmodel_id從carmodels表,並將其存儲在數據庫中完美地使用這樣一種形式:

<%= f.label :carname_id, "Car name:" %> 
<%= f.select :carname_id, @select_carnames %> 

<%= f.label :carmodel_id, "Model name:" %> 
<%= f.select :carmodel_id, @select_carmodels %> 

這樣,我放棄了從汽車表品牌和型號的領域,因爲我有2個新的工作領域carname_id和carmodel_id

現在的問題: 我怎樣才能使通過carmodel_id和carname_id搜索,使得形式像這樣的時候:

<%= f.label :carname_id_contains, "Model name:" %> 
<%= f.select :carname_id_contains, @select_carnames %> 
<%= f.label :carmodel_id_contains, "Model name:" %> 
<%= f.select :carmodel_id_contains, @select_carmodels %> 

返回我一個錯誤
未定義的方法`carname_id_contains'的元搜索: :搜索::汽車:0xb584b7a4

汽車控制器:

def index 
    @search = Car.search(params[:search]) 
    @cars = @search.all.paginate :page => params[:page], :per_page => 18 
    @select_carnames = Carname.find(:all).map{|element| [element.name, element.id]} 
    @select_carmodels = Carmodel.find(:all).map{|element| [element.name, element.id]} 

    respond_to do |format| 
     format.html # index.html.erb 
     format.xml { render :xml => @cars } 
     format.json { render :json => @cars.map(&:attributes) } 
    end 
    end 



    def new 
    @car = Car.new 
    @select_carnames = Carname.find(:all).map{|element| [element.name, element.id]} 
    @select_carmodels = Carmodel.find(:all).map{|element| [element.name, element.id]} 
     5.times { @car.assets.build } 

     respond_to do |format| 
      format.html # new.html.erb 
      format.xml { render :xml => @car } 
     end 

    end 

def edit 
    @car = Car.find(params[:id])} 
    @select_carnames = Carname.find(:all).map{|element| [element.name, element.id]}} 
    @select_carmodels = Carmodel.find(:all).map{|element| [element.name, element.id]}}<br /> 
    5.times { @car.assets.build } 
end 

我希望我去把它儘可能地寫得好,我真的會對這個問題提供任何幫助和想法。謝謝你的時間。

回答

1

,答案是

<%= f.label :carname_id_equals, "Model name:" %> 
<%= f.collection_select :carname_id_equals, Carname.order('name ASC').all, :id, :name, :include_blank => true %><br /> 

<%= f.label :carmodel_id_equals, "Model name:" %> 
<%= f.collection_select :carmodel_id_equals, Carmodel.order('name ASC').all, :id, :name, :include_blank => true %><br /> 

我需要在未來更多的RDOC :)

相關問題