0

我正在尝试在我的 Rails 3.1 应用程序中使用 Datamapper,但在映射第二个存储库中存在的模型时遇到了问题。

我有以下课程

class Arp
  include DataMapper::Resource

  storage_names[:passive] = "arp"

  property :id, Serial, :field => "id"
  property :ip_address, String, :field => "ipaddr"

  def self.default_repository_name
    :passive
  end
end

还有一些字段,但为了简单起见,我将它们注释掉并得到相同的错误。这是我运行 rake db:migrate 时得到的结果:

Arp 必须具有至少一个属性或多对一关系才有效

不知道发生了什么,因为我清楚地定义了一个属性。

这是mysql的表结构

+--------+-------------+------+-----+---------+----------------+
| Field  | Type        | Null | Key | Default | Extra          |
+--------+-------------+------+-----+---------+----------------+
| id     | int(11)     | NO   | PRI | NULL    | auto_increment |
| ipaddr | varchar(15) | NO   |     | NULL    |                |
+--------+-------------+------+-----+---------+----------------+

为了清楚起见,再次删除了一些字段。

我在 rails 的 database.yml 文件中有多个存储库,我根据 dm-rails github 页面上的指南设置它们。

这是该文件的缩短版本。

passive_defaults: &passive_defaults
  adapter: mysql
  username: <USERNAME GOES HERE>
  password: <PASSWORD GOES HERE>
  host: localhost
  database: passive

development:
  database: portal
  <<: *portal_defaults
  repositories: 
    passive: 
      <<: *passive_defaults

有人看到我在这里做错了吗?谢谢。

4

1 回答 1

1

我在问这个问题后不久就解决了这个问题。

self.default_repository_name 覆盖的顺序很重要。所以

class Arp
  include DataMapper::Resource

  def self.default_repository_name
    :passive
  end    
  storage_names[:passive] = "arp"

  property :id, Serial, :field => "id"
  property :ip_address, String, :field => "ipaddr"    
end

作品。

于 2012-01-16T18:50:30.150 回答