2011-10-29 24 views
0

Rubyを使ったインターネットアプリケーションのクローニングのtinycloneの例に従っており、mysqlに保存するオブジェクトを作成しようとしています。DataMapperはmysqlに保存できません。id = nilのオブジェクトを作成することはできません。

しかし、私はUrlオブジェクト(以下のコードを参照してください)を作成しようとすると、結果は常に "=> Url @ id = nil @ original =" http://www.gmail.com "@ link_identifier = nil "

IDは作成されず、データはデータベースに保存されません。 SQLデータベースへのリンクは、既にデータベースを削除してDataMapper.auto_migrateを使用して再作成しようとしたので正しいです!

誰でも手助けできますか?ありがとう。

DataMapper.setup(:default,'mysql://[email protected]/tinyclone') 

class Url 
    include DataMapper::Resource 
    property :id,   Serial 
    property :original, String, :length => 255 
    belongs_to :link 
end 

class Link 
    include DataMapper::Resource 
    property :identifier, String, :key => true 
    property :created_at, DateTime 
    has 1, :url 
    has n, :visits 
end 

DataMapper.finalize 

url = Url.create(:original => 'http://www.gmail.com') 
=> #<Url @id=nil @original="http://www.gmail.com" @link_identifier=nil> 
+0

どうやら私はリンクとlink_identifierを最初に作成する必要があります。 – revolver

答えて

2

あなたのURLモデルでは、リンクが必須です。検証が失敗するため、リンクなしでURLを作成することはできません。あなたが書くことができるリンクにそれらを関連付けることなくURLを作成できるようにしたい場合はbelongs_to :link, :required => false

+0

ありがとうございました:) – revolver

関連する問題