2012-03-24 5 views
1
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! 

??? 오류를 throw하는 관계를 표시했습니다. "execute_non_query : 기본값이 NULL 인 NOT NULL 열을 추가 할 수 없습니다 (DataObjects :: SyntaxError) " 2를 정의하는 방법은 datamapper에서 하나의 모델과 많은 관계가 있습니까?`execute_non_query ': 기본값이 NULL 인 NOT NULL 컬럼을 추가 할 수 없음 (DataObjects :: SyntaxError)

답변

5

기본적으로 belongs_to 관계가 필요합니다. 귀하의 데이터베이스에 이미 Record 개의 항목이 있다고 가정합니다. auto_upgrade은 연결에 대한 새 필드를 추가하려고 시도하며 기본적으로 해당 열을 NOT NULL으로 표시합니다. 그러나 모든 기존 레코드의 경우 값은이됩니다.

이 극복하려면 다음 중 하나를 수행하십시오

  • auto_migrate 대신 auto_upgrade의 작업을 수행합니다. 이렇게하면 데이터가 날아가지만 은 NULL 값에 질식하지 않고도 관계 열을 추가 할 수 있습니다.
  • 연결을 :required => false으로 선택적으로 설정하십시오. 이렇게하면 데이터베이스에 NULL이 허용됩니다. 그런 다음 해당 필드를 적절한 값으로 설정하십시오. 마지막으로 데이터베이스 테이블 열을 NOT NULL으로 수정하십시오.
+0

이것은 굉장했습니다! 고맙습니다! datamapper가 내 관계를 추가하는 데 문제가있어서이를 발견했습니다. – Hayden