0

Rails 3.1アプリケーションでDatamapperを使用しようとしていますが、2番目のリポジトリに存在するモデルのマッピングに問題があります。

私は次のクラスを持っています

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を有効にするには、少なくとも1つのプロパティ、または多対1の関係が必要です。

プロパティが明確に定義されているため、何が起こっているのかわかりません。

これがmysqlのテーブル構造です

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

ここでも、わかりやすくするためにいくつかのフィールドを削除しました。

database.ymlファイルに複数のリポジトリがrailsにあり、dm-railsgithubページのガイドに基づいてそれらを設定しました。

これがそのファイルの短縮版です。

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 に答える