Estou tentando usar o Datamapper no meu aplicativo Rails 3.1 e estou tendo problemas para mapear modelos existentes em um segundo repositório.
Eu tenho a seguinte classe
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
Existem mais campos, mas por uma questão de simplicidade, comentei-os e obtive o mesmo erro. Aqui está o que eu recebo quando executo o rake db: migrate:
O Arp deve ter pelo menos uma propriedade ou muitos para um relacionamento para ser válido
Não tenho certeza do que está acontecendo, porque eu claramente tenho uma propriedade definida.
Aqui está a estrutura da tabela do mysql
+--------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+--------+-------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| ipaddr | varchar(15) | NO | | NULL | |
+--------+-------------+------+-----+---------+----------------+
Novamente, alguns campos foram removidos para maior clareza.
Eu tenho vários repositórios no meu arquivo database.yml no Rails e os configurei com base no guia da página do github dm-rails.
Aqui está uma versão abreviada desse arquivo.
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
Alguém viu o que estou fazendo de errado aqui? Obrigado.
Respostas:
1 para resposta № 1Eu resolvi isso logo depois de fazer a pergunta.
A ordem da substituição self.default_repository_name importava. assim
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
trabalho.