2012-01-31 34 views
12

Đây là tình huống.Cách lưu Mongoid foreign_key dưới dạng số nguyên hoặc giữ mô hình gốc có số nguyên

user embed_one profile 
profile belongs_to city 

Tôi đã cư một bảng thành phố với

id as Integer 
name as String 

Bây giờ tôi đang làm user.update_attributes(:profile_attributes{:city_id=>"5"}) mô phỏng một hình thức trình duyệt. Sau đó, tôi kiểm tra user.profile Tôi thấy rằng city_id được lưu trữ dưới dạng chuỗi. Điều này làm cho số user.profile.city của tôi hiển thị không.

Tôi tự hỏi điều phải làm ở đây là gì. Tôi có nên để id thành phố của tôi là chuỗi hoặc đối tượng BSON không? Hoặc tôi nên cố gắng để đánh chặn update_attributes để làm cho cửa hàng mongoid city_id là số nguyên? Lý do tôi đang sử dụng Integer là id cho thành phố là vì tôi nghĩ tìm kiếm thông qua Integer nhanh hơn tìm kiếm thông qua chuỗi. Và tôi cũng có các bảng tiểu bang và thành phố và tôi muốn khớp các id theo cách có thể dự đoán được vì vậy tôi không muốn sử dụng khóa ronome BSON.

Trả lời

0

Chắc chắn, nếu bạn sử dụng Mongoid, đúng cách là sử dụng các đối tượng BSON làm id. Nhưng nếu bạn hoàn toàn cần sử dụng số nguyên làm id thành phố, bạn có thể mô phỏng thuộc tính với mã như thế này

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

điều này có vẻ đầy hứa hẹn. nhưng có thể có rất nhiều phương pháp để thêm vào nếu vấn đề liên quan đến nhiều bảng và nhiều thuộc tính. Sẽ được tốt đẹp nếu tôi có thể tự động chuyển đổi params chuỗi thành số nguyên nếu tôi tuyên bố những thuộc tính như số nguyên. Khỉ vá Môngoid, có lẽ? – benzhang

+0

Vấn đề với các đối tượng bson là gì? – rwz

+0

Tôi đang chuyển các bảng thành phố của tiểu bang. Và tôi muốn số nguyên là id của tiểu bang để thành phố của tôi đề cập đến trạng thái đúng. Tôi đoán tôi có thể sử dụng một thuộc tính riêng biệt như chìa khóa nước ngoài sau đó tôi sẽ không nhớ bson là id. – benzhang

Các vấn đề liên quan