Рубин в Синатре с использованием DataMapper не получает ассоциации - PullRequest
1 голос
/ 14 декабря 2011

По какой-то причине моя модель не содержит связанных моделей, с которыми я связался, имеет n.

Мое определение таково:

class Post
    include DataMapper::Resource

    has n, :comments

    property :id, Serial
    property :name, String
end

class Comment
    include DataMapper::Resource

    belongs_to :post

    property :id, Serial
    property :comment, Text  
end

Затем, по какой-то причине, используя следующий маршрут / код, выдает ошибку, поскольку комментарии не являются атрибутом пользователя.

class MyApp < Sinatra::Application
  get "/" do

    @post = Post.get(1)    
    @post.comments.inspect
  end
end

Таблицы, сгенерированные DataMapper, выглядят нормально (используя DataMapper.finalize & DataMapper.auto_upgrade!). У него есть пользовательская таблица и таблица комментариев с внешним ключом для posts.id.

Любой совет по этому поводу?

Ответы [ 2 ]

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

Хорошо, получается, что я добавил поле Time к объявлению комментария, вот так:

class Comment
    include DataMapper::Resource

    belongs_to :post

    property :id, Serial
    property :time, Time
    property :comment, Text  
end

Я также использую MySQL, который не имеет типа Time и сохраняет его как DateTime. При попытке получить комментарии с помощью Post.comments DataMapper пытается проанализировать его как время и умирает.

Надеюсь, это избавит кого-то от головной боли.

0 голосов
/ 14 декабря 2011

Какую версию datamapper вы используете?

Вы можете создавать комментарии, сохранять их и видеть, какие значения они хранят в post_id?

Попробуйте явно поместить отношение родитель-ключ дочерний-ключ, как это

belongs_to :post, :parent_key => [:id], :child_key => [:post_id]
property   :post_id, Integer
...