2012-04-15 46 views
0

我有我認爲是非標準模型結構(我知道它是壞的,但它的必要條件)。鑑於以下遷移:使用非id列查詢數據庫

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

回答

3

所以說你要像一個網址:

/製造/奧迪/模型/ A6

在你的路由文件

做:

resources manufactures do 
    resources models 
end 

對於你想切換主鍵

製造商模型的模型:

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

做同樣的事情爲你的模型模型

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") 
+0

這是很好的,但在第一步,我在模型set_primary_key「MFA_ID」,但在控制器中,我想通過MFA_ID找到,但是對於MOD_Name?編輯:對不起)我真的很愚蠢))這是不好的學習18/7 – byCoder 2012-04-15 18:52:33

+0

你可以使用find_by方法。所以嘗試.find_by_mod_name(「a6」) – 2012-04-15 18:54:35

+0

好的)))我發現了 – byCoder 2012-04-15 18:55:29

0

如果你有一個遷移並且正在創建一個新的數據庫,t如果你應該製作一個標準的分貝。我知道你是否連接到你無法設計的數據庫。我也使用小寫字段名稱。

如果你想讓MFA_BRAND成爲主鍵,那麼你可以在你的類中設置主鍵。假設你想MFA_ID是主鍵,那麼你將你的類添加爲:

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

這將改變查找和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 
+0

他已經說明了它有必要有一個非標準的數據庫。通常情況下,數據庫在多個應用程序之間共享。問題是如何處理這個限制。 – 2012-04-15 18:59:31

+1

我確實給了他一個處理非標準數據庫的解決方案。我看到他正在使用遷移,這讓我認爲他有一定的自由來控制*他的數據庫和翻譯。但是,如果他真的沒有,我仍然給他一個解決方案。 – 2012-04-15 19:07:52