1

简介: 我正在开发一个汽车经销商应用程序,所以我有一个名为汽车的表,其中包含字段 carname_id 和 carmodel_id。carname_id 和 carmodel_id 取自两个名为 carnames 和 carmodels 的表,我在其中保存了所有汽车名称和汽车型号。现在我已经设置了这些模型,所以我可以让它们建立关系,比如belongs_to和has_many(不相关,因为它应该正常工作 - 我可以从选择列表中将汽车和模型添加到新车)

我正在使用 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 %>

品牌和型号字段是汽车表中的旧文件,用于存储汽车的汽车和型号名称。但是当我进入高级搜索表单时,我发现自己陷入了动态选择模型列表中。我在 car.rb 中有一个为 Car list 指定的汽车名称列表和一个汽车模型列表。我同意这是不是最好的方法,这就是为什么我必须创建 2 个表:我一开始就告诉过你的汽车名称和汽车型号。我已经设置了所有东西,添加新车按预期工作,我可以选择一个 carname_id来自 carnames 表和 carmodels 表中的 carmodel_id,它使用如下形式完美地存储在数据库中:

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

为 MetaSearch::Searches::Car:0xb584b7a4返回一个错误
未定义的方法“carname_id_contains”

汽车控制器:

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

我希望我尽可能地描述它,我真的会感谢任何关于这个的帮助和任何想法。谢谢大家的时间。

4

1 回答 1

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

于 2011-10-12T19:44:45.170 回答