11

我已经从另一个项目创建了表。他们的名字被格式化为 aaa_bbb_ccc_ddd (所有非复数,有些部分不是约定词)。我已经通过阅读这个成功地从数据库创建了一个模式。但现在我必须制作实际的模型。我看过RMRE,但他们在我的表上强制执行 ActiveRecord 约定并更改它们的名称,我不想这样做,因为其他应用程序依赖于这些表。

从现有表自动创建模型和模式的最佳方法是什么?

4

1 回答 1

22

只是一个理论,不确定这在实际应用中如何工作:

根据约定创建models命名ActiveRecord,例如,对于表aaa_bbb_ccc_ddd,您将创建一个模型AaaBbb并将此模型映射到您的表:

class AaaBbb < ActiveRecord::Base
    self.table_name = "aaa_bbb_ccc_ddd"
end

或更人性化的例子:

class AdminUser < ActiveRecord::Base
    self.table_name = "my_wonderfull_admin_users"
end

现在您将拥有AaaBbb路由中的资源,这意味着您将拥有如下网址:

 .../aaa_bbb/...

如果你想在 url 中使用表名 name 我猜你可以重写路由:

get 'aaa_bbb_ccc_ddd/:id', "aaa_bbb#show", as: "aaa_bbb"

再次,只是一个可能对您有所帮助的理论。我还没有处理过这种情况,但会从这个开始。


编辑

从数据库自动创建模型:

https://github.com/bosko/rmre

但我认为这将通过 Rails 约定创建具有奇怪名称的模型,您必须将其用作应用程序中的资源。


如果您想使用与表名不同的模型名称,我在 SO 上找到了一个很好的模板:

class YourIdealModelName < ActiveRecord::Base
  self.table_name = 'actual_table_name'
  self.primary_key = 'ID'

  belongs_to :other_ideal_model, 
    :foreign_key => 'foreign_key_on_other_table'

  has_many :some_other_ideal_models, 
    :foreign_key => 'foreign_key_on_this_table', 
    :primary_key => 'primary_key_on_other_table'
end
于 2013-08-12T21:30:57.943 回答