Ruby / Sinatra / DataMapper如何创建对象的多对多

时间:2011-12-14 20:50:24

标签: ruby many-to-many sinatra datamapper

我有两个名为User和Gig的类,还有一个连接表Usergig。

  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

我收到错误: / gig / add中的NoMethodError 未定义的方法`include?'为零:NilClass

我已经用Google搜索了大约两个小时,并阅读了DataMapper文档。 谁知道我做错了什么?

2 个答案:

答案 0 :(得分:1)

在Usergig中尝试以下操作:

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

答案 1 :(得分:1)

您忘记调用DataMapper.finalize ...这是您在加载所有模型后需要调用的内容。 Rails为你做这件事,在Sinatra你必须手动调用它。