2012-01-31 29 views
12

這裏是情況。如何將Mongoid foreign_key保存爲整數或保留父模型有Integer id

user embed_one profile 
profile belongs_to city 

我已填充一個城市表

id as Integer 
name as String 

我現在做 user.update_attributes(:profile_attributes{:city_id=>"5"})模擬瀏覽器表單提交。然後我檢查user.profile我看到city_id存儲爲字符串。這使我的user.profile.city給零。

我想知道什麼是在這裏做正確的事情。我應該讓我的城市ID是字符串還是BSON對象?或者我應該嘗試攔截update_attributes使mongoid商店city_id爲整數?我使用Integer作爲城市id的原因是因爲我認爲通過Integer搜索比搜索字符串更快。此外,我還擁有州和城市表格,我希望以可預見的方式匹配ID,所以我不想使用BSON隨機數鍵。

回答

0

當然,如果你使用Mongoid,正確的方法是使用BSON對象作爲標識。但是,如果你絕對需要使用整數作爲城市ID,你可以用這樣的代碼模擬belongs_to

class Profile 
    def city 
    City.where(:id => self.city_id).last 
    end 

    def city=(new_city) 
    self.city_id = new_city.id 
    end 
end 
+0

這看起來很有希望。但如果問題涉及許多表和許多屬性,可能會添加很多方法。如果我可以自動將字符串參數轉換爲整數,如果我將這些屬性聲明爲整數將會很好。也許猴子修補到Mongoid? – benzhang 2012-02-01 19:28:45

+0

bson對象有什麼問題? – rwz 2012-02-02 11:17:34

+0

我正在移植城邦表格。我希望整數是狀態的id,所以我的城市指的是正確的狀態。我想我可以使用一個單獨的屬性作爲外鍵然後我不介意bson作爲id。 – benzhang 2012-02-06 01:11:58