2011-06-09 91 views
1

我正在使用RoR 3.x和MySQL作爲後端。Rails MySQL自動生成列

是否有任何方式來修改現有的id(通過遷移自動生成),以便可以生成特定的用戶定義模式。

對於例如:「產品表」應該在「ID」值,如「P01」,「P02」等,其中,可以由用戶來指定P,和01,02字段是自動生成的。

在此先感謝!

+0

你是否考慮過爲角色/計數創建一個或兩個額外的列,然後自己更新它們,並將ID單獨留下?還是有另一個要求,防止這種情況? – Kelend 2011-06-09 14:25:04

回答

4

在這種情況下,'常規'ID(1,2,3,...,n)不是由rails生成的,而是由MySQL生成的(使用AUTO_INCREMENT)。所以,如果你想使用自動生成的自動遞增ID,我建議不要搞這個。你可以做什麼,我會建議,創建一個額外的列,然後在你的模型上使用回調來填充。

例子:

class Product < ActiveRecord::Base 
    attr_accessor :user_supplied_prefix 

    after_create :generate_user_supplied_id 

    private 
    def generate_user_supplied_id 
    update_attribute(:user_supplied_id, "#{self.user_supplied_prefix}#{self.id}") 
    end 
end 

這種方法的缺點是,Product.find(user_supplied_id)將無法​​正常工作。幸運的是,Product.find_by_user_supplied_id(user_supplied_id)會。

+0

謝謝...這工作:) – Rashmi 2011-06-13 11:51:37