2011-03-18 21 views
5

tengo un modelo de Dirección como seguirMongoId, la incorporación de un documento en varios documentos

class Address 
    include Mongoid::Document 

    field :line1 
    field :city 
    # more fields like this 

    embedded_in :user, :inverse_of => :permanent_address 
    embedded_in :user, :inverse_of => :current_address 
    embedded_in :college, :inverse_of => :address 
end 

hay modelos College y del usuario, que incrustar la dirección

class College 
    include Mongoid::Document 

    references_many :users 
    embeds_one :address 

    # some fields and more code 
end 


class User 
    include Mongoid::Document 

    referenced_in :college, :inverse_of => :users 

    embeds_one :permanent_address, :class_name => "Address" 
    embeds_one :current_address, :class_name => "Address" 

    # fields and more code 
end 

estoy recibiendo algunos problemas con la configuración anterior . Estoy usando un formulario único para solicitar una dirección actual y permanente junto con más información, pero solo se está guardando la dirección actual y eso también con los datos que llené en permanent_address.

Parameters: 
    {"utf8"=>"✓", 
    "authenticity_token"=>"KdOLvzmKyX341SSTc1SoUG6QIP9NplbAwkQkcx8cgdk=", 
    "user"=> { 
    "personal_info_attributes"=>{...}, 
    "nick_names_attributes"=>{...}, 
    "current_address_attributes"=>{ 
     "line1"=>"", 
     "area"=>"", 
     "country"=>"USA", 
     "postal_code"=>"sd", 
     "city"=>"", 
     "state"=>"", 
     "landmark"=>"", 
     "id"=>"4d891397932ecf36a4000064" 
    }, 
    "permanent_address_attributes"=>{ 
     "line1"=>"", 
     "area"=>"asd", 
     "country"=>"india", 
     "postal_code"=>"", 
     "city"=>"", 
     "state"=>"", 
     "landmark"=>"" 
    }, 
    "commit"=>"Submit", "id"=>"4d8903d6932ecf32cf000001"} 
MONGODB alma_connect['users'].find({:_id=>BSON::ObjectId('4d8903d6932ecf32cf000001')}) 
MONGODB alma_connect['users'].update({"_id"=>BSON::ObjectId('4d8903d6932ecf32cf000001')}, 
    {"$set"=>{ 
    "current_address"=>{ 
     "line1"=>"", 
     "area"=>"asd", 
     "country"=>"india", 
     "postal_code"=>"", 
     "city"=>"", 
     "state"=>"", 
     "landmark"=>"", 
     "_id"=>BSON::ObjectId('4d8916e9932ecf381f000005')}}}) 

No estoy seguro de si esto es algo que estoy haciendo mal aquí o si hay algún otro problema. Estoy usando Rails 3.0.4 y MongoId 2.0.0.rc.7

Actualización:

He actualizado a 2.0.1 y MongoId cambiado de usuario para incluir inversa de opciones en la dirección.

class User 
    include Mongoid::Document 

    referenced_in :college, :inverse_of => :users 

    embeds_one :permanent_address, :class_name => "Address", :inverse_of => :permanent_address 
    embeds_one :current_address, :class_name => "Address", :inverse_of => :current_address 

    # fields and more code 
end 

sé la inversa de nombres no tiene sentido, pero el punto principal aquí es sólo para hacerlos diferentes o si tiene buenos nombres para las relaciones de su clase incorporado (como: current_user,: permanent_user) , deberías usar eso para el inverso de.

Respuesta

1

Se ve bien conmigo. Tengo una configuración similar y funciona como se esperaba.

+0

gracias por la confirmación – rubish

+0

Tengo algunos problemas con los de arriba. Estoy usando un formulario único para obtener la dirección_corriente y la dirección_permanente, pero solo se guarda la dirección actual. – rubish

1

Desde el Mongoid docs

Cuando un documento niño incrustado puede pertenecer a más de un tipo de documento de nivel superior, se puede decir Mongoid para apoyar esto añadiendo el como opción para la definición de los padres, y el polimórfico opción en el niño. En el objeto secundario, se almacenará un campo adicional que indica el tipo de padre.

class Band 
    include Mongoid::Document 
    embeds_many :photos, as: :photographic 
    has_one :address, as: :addressable 
end 

class Photo 
    include Mongoid::Document 
    embedded_in :photographic, polymorphic: true 
end 

class Address 
    include Mongoid::Document 
    belongs_to :addressable, polymorphic: true 
end 
Cuestiones relacionadas