2012-01-31 8 views
12

ここに状況があります。Mongoid foreign_keyを整数として保存するか親モデルを保持する方法整数型

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にnilを与えるようにレンダリングします。

私はここで何が正しいのでしょうかと思います。私は私の都市のIDを文字列またはBSONオブジェクトにする必要がありますか?または、mongoidがcity_idを整数として格納するようにupdate_attributesを傍受しようとする必要がありますか?私がIntegerを都市のIDとして使用しているのは、Integerを使った検索が文字列の検索よりも速いと思ったからです。また、私は州と都市のテーブルを持っているので、私は予測可能な方法でIDを一致させたいので、私はBSONランドームキーを使いたくありません。

答えて

0

もちろん、モンゴイドを使用している場合、適切な方法はBSONオブジェクトをIDとして使用することです。しかし、あなたが絶対に都市のIDとして整数を使う必要があれば、

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

のように、これは有望と思われます。問題が多くの表と多くの属性に関係する場合は、追加する方法がたくさんあります。これらの属性を整数として宣言すると、自動的に文字列パラメータを整数に変換できるといいですね。 MonkeyはMongoidにパッチを当てていますか? – benzhang

+0

bsonオブジェクトの問題点は何ですか? – rwz

+0

私はCity州のテーブルを移植しています。私は整数が国家のidであることを望んでいるので、私の都市は正しい状態を指しています。私は外部キーとして別の属性を使うことができると思うので、私はidとしてbsonを気にしません。 – benzhang

関連する問題