Недавно я унаследовал старое приложение merb, которое использует datamapper в качестве формы. Я не слишком знаком с DM, поэтому, вероятно, есть что-то очевидное, что я упускаю из виду. У меня есть простая связь между двумя моделями, которая не требуется, а именно:
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
Но по какой-то причине это не позволит мне сохранить пользователя без прикрепленной загрузки:
> u = User.create :name => 'foo'
=> #<User @id=nil @name=nil @upload_id=nil>
> s.errors.full_messages
=> ["Upload must not be blank"]
Просто чтобы быть уверенным, я попытался установить :required => false и на стороне «имеет n», но это, конечно, не имело никакого значения.
Все это на merb 1.0.13 и datamapper 0.10.1
РЕДАКТИРОВАТЬ: приведенный ниже ответ правильный, но я нашел обходной путь, вы можете добавить :nullable => true, чтобы эта работа работала следующим образом:
belongs_to :upload, :required => false, :nullable => true