Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 使用DataMapper的外键和关联_Ruby_Datamapper_Ruby Datamapper - Fatal编程技术网

Ruby 使用DataMapper的外键和关联

Ruby 使用DataMapper的外键和关联,ruby,datamapper,ruby-datamapper,Ruby,Datamapper,Ruby Datamapper,我已经彻底阅读了这一页: 如果答案就在那里,那就是没有用我能理解的方式表达出来 我对使用Datamapper建立关系感到非常困惑。上面的datamapper站点几乎是我在这个主题上所能找到的所有站点,正如我所说的,它并没有特别的帮助 例如,如果我想创建如下内容: 表:用户 id (primary key) name 表:属性 id (pk) title id (pk) user_id (fk to users.id) attribute_id (fk to attributes.id) v

我已经彻底阅读了这一页:

如果答案就在那里,那就是没有用我能理解的方式表达出来

我对使用Datamapper建立关系感到非常困惑。上面的datamapper站点几乎是我在这个主题上所能找到的所有站点,正如我所说的,它并没有特别的帮助

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

表:
用户

id (primary key)
name
表:
属性

id (pk)
title
id (pk)
user_id (fk to users.id)
attribute_id (fk to attributes.id)
value
表:
用户属性

id (pk)
title
id (pk)
user_id (fk to users.id)
attribute_id (fk to attributes.id)
value
这似乎很简单,但却非常困难。我尝试的每件事都会给我带来错误,比如
没有名为user\u attributes的关系,或者UserUserAttribute中的user\u attribute(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

我想您会看到类似于
userattribute
的情况,因为DataMapper正在尝试自动生成匿名联接类

这里有一篇文章描述了如何

您可能会对示例进行如下更改:

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

问题在于您的类是UserAttribute,并且您试图命名与user\u属性的关系。去掉下划线,您的问题就会消失(或在类名中添加下划线)

通过指定模型、父键和子键(名称选择不当),我正在慢慢地让它发挥作用。非常感谢。