2011-11-27 2 views
1

J'ai récemment hérité d'une ancienne application merb qui utilise datamapper comme son orm. Je ne suis pas trop familliar avec DM donc il y a probablement quelque chose d'évident que je néglige. J'ai une relation simple entre deux modèles, qui ne sont pas requis, comme suit:Datamapper 'appartient à/N'a pas ignoré: required => false

class User 
    include DataMapper::Resource 

    property :id,  Serial 
    property :name, String, :length => 100, :nullable => false 

    belongs_to :upload, :required => false 
end 

class Upload 
    include DataMapper::Resource 

    property :id,   Serial 
    property :filename,  String 

    has n, :users 
end 

Mais pour une raison quelconque, il ne me laisse pas enregistrer un utilisateur sans téléchargement ci-joint:

> u = User.create :name => 'foo' 
=> #<User @id=nil @name=nil @upload_id=nil> 
> s.errors.full_messages 
=> ["Upload must not be blank"] 

Juste pour être sûr que j'ai essayé le réglage: required => false sur le côté "has n" aussi, mais cela ne faisait aucune différence bien sur.

Tout cela sur merb 1.0.13 et DataMapper 0.10.1


EDIT: La réponse ci-dessous est correct, mais je ne trouve une solution de contournement, vous pouvez ajouter: annulable => true pour faire ce travail, comme suit:

belongs_to :upload, :required => false, :nullable => true 

Répondre

2

Il y avait un bogue dans l'ancien DM qui provoquait ce comportement. Je suggère fortement de porter cette application à Rails récents & DM.

+0

Merci pour le heads up. J'avais peur de ça.. –

Questions connexes