【问题标题】:Datamapper upgrade fails in rails 3.1 for 2nd repository第二个存储库的 Rails 3.1 中的 Datamapper 升级失败
【发布时间】:2012-01-15 20:20:35
【问题描述】:

我正在尝试在我的 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

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

【问题讨论】:

    标签: ruby-on-rails-3.1 ruby-datamapper


    【解决方案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
    

    有效。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-11-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-22
      相关资源
      最近更新 更多