0

私は非標準モデル構造だと思うものを持っています(それが悪いことは知っていますが、必要です)。次の移行を考えると:

create_table :MODELS, :primary_key => :MOD_ID do |t|
  t.integer :MOD_ID
  t.integer :MOD_MFA_ID
  t.integer :MOD_CDS_ID
  t.integer :MOD_PCON_START
  t.integer :MOD_PCON_END
  t.integer :MOD_PC
  t.integer :MOD_CV
  t.integer :MOD_AXL
  t.binary :MOD_PC_CTM
  t.binary :MOD_CV_CTM

  t.timestamps

MOD_MFA_ID、別のテーブル/モデルへの関連付けに対応します ( manufacturers)。メーカーのブランド欄から機種を検索したいです。

  def getmanufacturer 
    @manufacturer = Manufacturers.find(params[:manufacturer])

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

このユースケースを処理するためにコントローラーとルーティングを変更する方法がわかりません。この種類または URL を使用してアプリにクエリを実行したい:/models?manufacturer=audi&&model=a6

4

2 に答える 2

3

つまり、次のような URL が必要です。

/製造/アウディ/モデル/a6

あなたのルートファイルで次のようにします:

resources manufactures do
  resources models
end

主キーを切り替えたいモデルの場合

メーカー型式:

set_primary_key :manufacturer_name #what ever you want used instead of ID

MODEL モデルに対して同じことを行います

set_primary_key :MOD_Name

次に、コントローラーで次のことができます。

Manufacturer.find(params[:manufaturer_id]).models.find(params[:id])

主キーを切り替えたくない場合は、find_by を実行することもできます。

Manufacturer.find_by_manufacturer_name("Audi").models.find_by_model_name("a6")
于 2012-04-15T18:45:23.547 に答える
0

移行があり、新しいデータベースを作成している場合は、標準のデータベースを作成する必要があります。設計できなかったデータベースに接続している場合は理解しています。フィールド名にも小文字を使用します。

MFA_BRAND を主キーにする場合は、クラスに主キーを設定できます。MFA_ID を主キーにしたい場合は、これを次のようにクラスに追加します。

class Model < ActiveRecord::Base
  set_primary_key "MFA_ID"
end

これにより、find メソッドと to_param メソッドが主キー フィールドを使用するように変更されます。

ただし、主キーを変更したくないが、MFA_BRAND で検索したい場合があると仮定すると、MFA_BRAND 値を CGI パラメーターとして渡す必要があります。最初にルートを次のように設定します

resources :models do
  collection do
    get :getmanufacturer
  end
end

パス ヘルパーが必要な場合は、次のように呼び出します。

getmanufacturer_models_path(:manufacturer => "Acme")

URLは

/models/getmanufacturer?manufacturer=Acme
于 2012-04-15T18:55:22.483 に答える