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! 

With ??? "execute_non_query":デフォルト値NULLのNOT NULL列を追加できません(DataObjects :: SyntaxError) " 2を定義する方法は、datamapperの1つのモデルに対して多くの関係を持っていますか?`execute_non_query ':デフォルト値NULLのNOT NULLカラムを追加できません(DataObjects :: SyntaxError)

答えて

5

デフォルトでは、belongs_toの関係が必要です。私はあなたのデータベースに既にRecordのエントリがあると仮定します。 auto_upgradeはアソシエーションに新しいフィールドを追加しようとしていますが、デフォルトではその列はNOT NULLとマークされています。ただし、すべての既存のレコードでは、値になります。

次のいずれか、この問題を回避するには、次の

  • ではなくauto_upgradeauto_migrateを行います。これはデータを吹き飛ばすでしょうが、 は、 NULL値で窒息せずに関係列を追加できるようになります。
  • アソシエーションを:required => falseでオプションにします。これにより、データベースにNULLが許可されます。次に、これらのフィールドを適切な値に設定します。最後に、データベース表の列をNOT NULLに変更します。
+0

これはすばらしかったです!ありがとうございました!私はdatamapperが私の関係を追加するのに苦労して、これを見つけました。 – Hayden

関連する問題