Ruby在Sinatra中使用DataMapper而不是检索关联

时间:2011-12-14 12:47:00

标签: ruby sinatra ruby-datamapper

出于某种原因,我的模型不包含我使用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&amp; DataMapper.auto_upgrade!)。它有一个用户表和一个在posts.id上有外键的注释表。

对此有何建议?

2 个答案:

答案 0 :(得分:0)

您使用的是哪个版本的数据管理器?

您可以创建注释,保存注释并查看它在post_id中存储的值吗?

尝试显式放置父键子键关系,如此

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

答案 1 :(得分:0)

好的,事实证明我在评论声明中添加了一个时间字段,如下所示:

class Comment
    include DataMapper::Resource

    belongs_to :post

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

我也使用没有Time类型的MySQL并将其保存为DateTime。当尝试使用Post.comments检索注释时,DataMapper尝试将其解析为Time and die。

希望这可以为某些人带来一些麻烦。