Rails:从现有表创建模型?

时间:2013-08-12 21:22:57

标签: ruby-on-rails activerecord ruby-on-rails-4

我已经从不同的项目创建了表格。它们的名称格式为aaa_bbb_ccc_ddd(全部为非复数,部分部分不是常规字)。我已经通过阅读this从数据库中成功创建了一个模式。但现在我必须制作实际模型。我查看了RMRE,但他们在我的表上强制执行A​​ctiveRecord约定并更改其名称,我不想这样做,因为其他应用依赖于这些表。

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

2 个答案:

答案 0 :(得分:18)

只是一个理论,不确定这在真正的app中是如何工作的:

创建名为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中使用表名称,我猜你可以重写路由:

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

答案 1 :(得分:1)

替代解决方案: https://github.com/wnameless/rare_map

它不会强制您更改现有表格的任何内容。