class User
include DataMapper::Resource
property :id, Serial
property :name, String
property :email, String
has n, :records
end
class Project
include DataMapper::Resource
property :id, Serial
property :name, String
has n, :records ?????
end
#
class Record
# SPEND_REGEX = /^[0-9]{1}:[0-5]{1}[0-9]{1}$/
include DataMapper::Resource
property :id, Serial
property :reporting_type, String
property :spend_time, String
belongs_to :user
belongs_to :project ????
end
DataMapper.auto_upgrade!
用???我标记了一个错误“execute_non_query”的关系:无法添加一个默认值为NULL的NOT NULL列(DataObjects :: SyntaxError) “ 如何定义2与datamapper中的一个模型有很多关系?
答案 0 :(得分:6)
默认情况下,您需要belongs_to
个关系。我假设您的数据库中已有Record
个条目。 auto_upgrade
正在尝试为关联添加新字段,默认情况下会将该列标记为NOT NULL
。但是,对于所有现有记录,该值将为NULL。
要解决此问题,请执行以下操作之一:
auto_migrate
而不是auto_upgrade
。这会吹走你的数据,但是
将允许您添加关系列而不会阻塞它
NULL值。:required => false
可选。这将允许数据库中的NULL。接下来,进入并将这些字段设置为适当的值。最后,将数据库表列修改为NOT NULL
。