1

はじめに: 私はカー ディーラー アプリケーションに取り組んでいるので、フィールド carname_id と carmodel_id を持つ cars という名前のテーブルがあります。carname_id と carmodel_id は、すべての車の名前と車のモデルを保持する carnames と carmodels という名前の 2 つのテーブルから取得されます。今、私はこれらのモデルをセットアップして、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 %>

make および model フィールドは、車と車のモデル名を格納するために使用した、cars テーブルの古いフィールドです。しかし、高度な検索フォームに入ると、モデル リストを動的に選択するのに行き詰まっていることに気付きました. car.rb に、車のリストに指定された車の名前のリストと車のモデルのリストがあります.. これがそれを行うための最良の方法ではないので、最初に説明した carnames と carmodels の 2 つのテーブルを作成する必要がありました..すべてをセットアップし、新しい車の追加は期待どおりに機能します。 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 があるため、cars テーブルの make フィールドと model フィールドをあきらめます

問題: 次 のようなフォームを作成するときに、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 の undefined method `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 に答える