2012-03-24 76 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! 

With ???我標記關係拋出一個錯誤「`execute_non_query':不能添加一個NOT NULL列與默認值NULL(DataObjects :: SyntaxError) 」 如何定義2有很多關係到一個模型在datamapper?`execute_non_query':無法添加具有默認值NULL的NOT NULL列(DataObjects :: SyntaxError)

回答

5

默認情況下,您的belongs_to關係是必需的。我假設你已經在你的數據庫中有Record條目。 auto_upgrade正試圖爲關聯添加新字段,並且默認情況下會將該列標記爲NOT NULL。但是,對於所有現有記錄,該值爲NULL。

要解決這個問題,請執行下列操作之一:

  • 做的auto_migrate代替auto_upgrade。這會吹走您的數據,但 將允許您添加關係列,而不會在 NULL值窒息。
  • 使關聯選項爲:required => false。這將允許數據庫中的NULL。接下來,進入並將這些字段設置爲適當的值。最後,將數據庫表列修改爲NOT NULL
+0

這太棒了!謝謝!我無法獲得datamapper添加我的關係,並發現這一點。 – Hayden 2015-02-21 19:25:24