Ruby / Sinatra / DataMapper Многие-ко-многим, как создать объект - PullRequest
3 голосов
/ 15 декабря 2011

У меня есть 2 класса, которые называются 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 / добавить неопределенный метод `include? 'для nil: NilClass

Я уже два часа гуглю и читаю документацию по DataMapper.Кто-нибудь знает, что я делаю не так?

Ответы [ 2 ]

1 голос
/ 15 декабря 2011

Вы забыли вызвать DataMapper.finalize ... это то, что вам нужно позвонить после загрузки всех ваших моделей.Rails делает это за вас, в Синатре вы должны вызывать это вручную.

1 голос
/ 15 декабря 2011

В Usergig попробуйте следующее:

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