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

时间:2012-03-24 11:34:58

标签: sinatra datamapper 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!

用???我标记了一个错误“execute_non_query”的关系:无法添加一个默认值为NULL的NOT NULL列(DataObjects :: SyntaxError) “ 如何定义2与datamapper中的一个模型有很多关系?

1 个答案:

答案 0 :(得分:6)

默认情况下,您需要belongs_to个关系。我假设您的数据库中已有Record个条目。 auto_upgrade正在尝试为关联添加新字段,默认情况下会将该列标记为NOT NULL。但是,对于所有现有记录,该值为NULL。

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

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