2011-12-14 5 views
3

私はUserとGigという2つのクラスと、結合テーブルUsergigを持っています。Ruby/Sinatra/DataMapper多対多オブジェクトの作成方法

class Usergig 
    include DataMapper::Resource 
    property :id, Serial 

    belongs_to :user 
    belongs_to :gig 
    end 

    class Gig 
    include DataMapper::Resource 
    property :id, Serial 
    property :gigname, String 
    property :gigtext, Text 

    has n, :usergigs 
    has n, :users, :through => :usergigs 
    end 

    class User 
    include DataMapper::Resource 
    property :id, Serial 
    property :username, String 
    property :realname, String 

    has n, :usergigs 
    has n, :gigs, :through => :usergigs 
    end 

と私が実行しようとすると:

post '/gig/add' do 
    user = User.get(1) 
    gig = user.gigs.create(:gigname => params[:gig_gigname], :gigtext => params[:gig_gigtext]) 
    end 

私はエラーを取得する: `ギグ/ 未定義のメソッドを追加/時 NoMethodErrorには、「? nil:NilClass

私は今約2時間グーグルで行き、DataMapperのドキュメントを読んでいます。 誰かが間違っていることを知っていますか? Usergigで

+0

投稿を編集して読みやすくしました。コードを貼り付けて(行番号を付けずにコピー/貼り付けできるようにしてください)、それを選択してCMD + K(Mac)またはctrl + K(PC)を押してください。 – d11wtq

+0

':through => Usergig'を試しましたか? – d11wtq

+0

完全なスタックトレースを送信します。 – d11wtq

答えて

1

は、次のことを試してください。

belongs_to :user, :key => true 
belongs_to :gig, :key => true 
1

あなたはDataMapper.finalizeに電話をするのを忘れた...これはすべてのあなたのモデルがロードされた後に呼び出すために必要なものです。 Railsがこれを行いますが、Sinatraでは手動で呼び出す必要があります。

関連する問題