Настройка ассоциаций с DataMapper и Sinatra

Хорошо, так что это движет я сумасшедший. Я прочитал статью и пример об ассоциациях и последние три дня пытался решить эту проблему, и я устал от этого, заставляя меня чувствовать себя глупо, так что ...

Как установить ассоциации с DataMapper?

(Я использую DM с Sinatra с SQLite3. Все прекрасно для отдельных таблиц с несколькими значениями и т. Д. Когда я начинаю пытаться связать их, я начинаю получать ошибки.)

Допустим, у меня есть Orchard full яблонь. На каждом дереве много яблок. У каждого яблока много семян. Следовательно, каждое дерево имеет много семян через свои яблоки

require 'sinatra'
require 'datamapper'

DataMapper::setup(:default, "sqlite3://#{Dir.pwd}/orchard.db")

# Trees in the orchard.
class Tree
  include DataMapper::Resource
  property :id, Serial

  has n, :apples
  has n, :seeds, :through => :apples
end

# Apples on a Tree.
class Apple
  include DataMapper::Resource
  property :id, Serial

  belongs_to :tree
  belongs_to :seed
end

# Seeds in an Apple
class Seed
  include DataMapper::Resource
  property :id, Serial

  has n, :apple
  has n, :tree, :through => apple 
end

DataMapper.finalize.auto_upgrade!

. Это верно? Я постоянно получаю различные ошибки, когда пытаюсь запустить это.В основном это связано с недопустимой ассоциацией или невозможностью создать столбец NULL со значением NULL и т. Д. Что я не понимаю в этой взаимосвязи?

Кроме того, если у меня есть рабочая модель, как мне получить из нее информацию?

Если есть 3 дерева:

Tree.all.count 
=> 3

Если есть 2 яблока:

Apple.all
=>[#<Apple @id=1>, #<Apple @id=2>]  

Хорошо, круто. Но сколько яблок у Дерева №2? Сколько семян у Дерева № 4? Сколько всего яблок? Сколько всего семян?

Любая помощь будет принята с благодарностью.

5
задан Don Graziano 22 September 2011 в 21:54
поделиться