Sinatra `执行非查询';:无法添加默认值为NULL的非NULL列(DataObjects::SyntaxError)

Sinatra `执行非查询';:无法添加默认值为NULL的非NULL列(DataObjects::SyntaxError),sinatra,datamapper,relationships,Sinatra,Datamapper,Relationships,跟???我标记了引发错误“执行非查询”的关系:无法添加默认值为NULL的非NULL列(DataObjects::SyntaxError) " 如何在datamapper中定义2与一个模型的多个关系?默认情况下,需要您的所属关系。我假设您的数据库中已经有记录条目。自动升级正在尝试为关联添加新字段,默认情况下,它将该列标记为非空。但是,对于所有现有记录,该值将为空 要解决此问题,请执行以下操作之一: 执行自动迁移而不是自动升级。这会破坏你的数据,但是 将允许您添加关系列,而不会阻塞它 空值 使用:

跟???我标记了引发错误“执行非查询”的关系:无法添加默认值为NULL的非NULL列(DataObjects::SyntaxError) "
如何在datamapper中定义2与一个模型的多个关系?

默认情况下,需要您的
所属关系。我假设您的数据库中已经有
记录
条目。
自动升级
正在尝试为关联添加新字段,默认情况下,它将该列标记为
非空
。但是,对于所有现有记录,该值将为空

要解决此问题,请执行以下操作之一:

  • 执行
    自动迁移
    而不是
    自动升级
    。这会破坏你的数据,但是 将允许您添加关系列,而不会阻塞它 空值
  • 使用
    :required=>false将关联设置为可选。这将允许在数据库中使用空值。接下来,进入并将这些字段设置为适当的值。最后,将数据库表列修改为
    notnull

这太棒了!非常感谢。我在让datamapper添加我的关系时遇到问题,并发现了此问题。
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!