2013-10-03 42 views
0

我正在構建一個帶有產品模型的rails 3應用程序。我一直在試圖找到一種方法來使用產品ID號作爲標識符,而不是使用模型的默認ID。Rails - 使用不同的主鍵

我最初嘗試使用to_param方法,但我無法讓它正常工作。

我然後使用產品ID號,而不是主鍵爲使重建我的數據庫:

class CreateProducts < ActiveRecord::Migration 
    def change 
    create_table :products, :id => false, :primary_key => :prod_id do |t| 
     t.string "prod_id" 
     t.string "upc" 
     t.text  "title" 
     t.text  "description" 
     t.timestamps 
    end 
    end 
end 

而且改變了我的代碼,以查找/創建使用PROD_ID。這似乎工作得很好,但是我希望能夠更多地瞭解這可能產生的後果,以及不使用主鍵的缺點。

回答

0

我希望能找到更多關於這可能產生的後果,以及不使用主鍵的缺點。

使用主鍵 - 這是prod_id。你只是沒有使用默認設置自動遞增鍵(大概是,但是,prod_id是自動遞增和唯一約束?因此,你可能只是因爲約定而將它保留爲id ...)。

如果您告訴您的模型使用不同的主鍵,則不需要執行任何其他配置(或關聯中的規範 - 將反射拾取prod_id)。

class Product < ActiveRecord::Base 
    set_primary_key :prod_id 
    ... 
end 

(不同版本的Rails已經與方法重組後這樣做...檢查您正在使用的任何API)

沒有什麼神奇的選擇要使用非默認的主鍵 - 你只需要一些字段,唯一標識每一行。它的名稱和數據類型實際上是無關緊要的 - 如果您真的想要,可以配置您的應用程序以使用GUID字符串作爲ID :-)