使用DataMapper的外键和关联

时间:2011-08-28 23:34:42

标签: ruby datamapper ruby-datamapper

我已经非常彻底地阅读了这个页面:

http://datamapper.org/docs/associations

如果答案在那里,那就不能用我能理解的方式来表达。

我对使用Datamapper建立关系非常困惑。上面的数据映射站点几乎是我在这个主题上可以找到的所有内容,正如我所说,它并没有特别有用。

例如,如果我想创建如下内容:

表:users

id (primary key)
name

表:attributes

id (pk)
title

表:user_attributes

id (pk)
user_id (fk to users.id)
attribute_id (fk to attributes.id)
value

这看起来很简单,但实在是太难了。我尝试的所有内容都会给我带来No relationships named user_attributes or user_attribute in UserUserAttribute (DataMapper::UnknownRelationshipError)

等错误

有人可以告诉我这个简单映射的类定义,也许可以指出我对DataMapper关联的更好讨论?以下是我尝试过的一些内容。

class User
  include DataMapper::Resource

  property :id,   Serial, :key => true
  property :name, String

  has n, :user_attributes, :through=>:attribute
end

class Attribute
  include DataMapper::Resource

  property :id,   Serial, :key => true
  property :name, String

  has n, :user_attributes, :through=>:user
end

class UserAttribute
  include DataMapper::Resource

  belongs_to :user
  belongs_to :attribute
end

2 个答案:

答案 0 :(得分:0)

我认为您正在看到UserUserAttribute之类的内容,因为DataMapper正在尝试自动生成匿名连接类。

这是一篇介绍如何制作named many-to-many relationships in DataMapper

的文章

你可能会改变这样的例子:

  • 用户 - >用户
  • 项目 - >属性
  • 协作 - > UserAttribute

答案 1 :(得分:0)

问题是您的类是UserAttribute,并且您尝试命名与user_attributes的关系。摆脱下划线,您的问题将消失(或在类名称中添加下划线)