`execute_non_query ': невозможно добавить столбец NOT NULL со значением по умолчанию NULL (DataObjects :: SyntaxError) - PullRequest
1 голос
/ 24 марта 2012
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: невозможно добавить столбец NOT NULL со значением по умолчанию NULL (DataObjects :: SyntaxError)» Как определить 2, имеет много связей с одной моделью в datamapper?

1 Ответ

6 голосов
/ 19 апреля 2012

По умолчанию ваши отношения belongs_to обязательны.Я предполагаю, что у вас уже есть Record записей в вашей базе данных.auto_upgrade пытается добавить новое поле для ассоциации и по умолчанию помечает этот столбец как NOT NULL.Однако для всех существующих записей это значение будет иметь значение NULL.

Чтобы обойти это, выполните одно из следующих действий:

  • Выполните auto_migrate вместо auto_upgrade.Это уничтожит ваши данные, но позволит вам добавить столбцы отношений, не задевая значения NULL.
  • Сделайте ассоциации необязательными с :required => false.Это позволит NULL в базе данных.Затем войдите и установите эти поля в соответствующие значения.Наконец, измените столбец таблицы базы данных на NOT NULL.
...