`execute_non_query':无法添加默认值为NULL的NOT NULL列(DataObjects :: SyntaxError)

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中的一个模型有很多关系?

Lar*_*nal 6

默认情况下,您的belongs_to关系是必需的.我假设您Record的数据库中已有条目.在auto_upgrade试图增加新的领域的关联,默认情况下它标志着列NOT NULL.但是,对于所有现有记录,该值将为 NULL.

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

  • 做一个auto_migrate而不是auto_upgrade.这会吹走你的数据,但会允许你添加关系列而不会阻塞NULL值.
  • 使关联可选:required => false.这将允许数据库中的NULL.接下来,进入并将这些字段设置为适当的值.最后,修改数据库表列NOT NULL.