use*_*228 1 datamapper sinatra relationships
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!
Run Code Online (Sandbox Code Playgroud)
用??? 我标记了抛出错误的关系"`execute_non_query':无法添加带有默认值NULL的NOT NULL列(DataObjects :: SyntaxError)"如何定义2与datamapper中的一个模型有很多关系?
默认情况下,您的belongs_to关系是必需的.我假设您Record的数据库中已有条目.在auto_upgrade试图增加新的领域的关联,默认情况下它标志着列NOT NULL.但是,对于所有现有记录,该值将为 NULL.
要解决此问题,请执行以下操作之一:
auto_migrate而不是auto_upgrade.这会吹走你的数据,但会允许你添加关系列而不会阻塞NULL值.:required => false.这将允许数据库中的NULL.接下来,进入并将这些字段设置为适当的值.最后,修改数据库表列NOT NULL.