Rails:如何从现有的表创建模型?

12

我已经从另一个项目中创建了表格。它们的名称格式为aaa_bbb_ccc_ddd(非复数,某些部分不是规定单词)。我通过阅读这篇文章成功地从数据库创建了模式。但现在我需要制作实际的模型。我查看了RMRE,但它们强制我对我的表格使用ActiveRecord约定并更改它们的名称,这是我不想做的,因为其他应用程序依赖于这些表格。

如何从现有的表格自动创建模型和模式是最好的方式?

2个回答

23

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

创建名为ActiveRecordmodels,按照惯例要求,例如对于表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作为资源,这意味着你将拥有如下url:

 .../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

1
有没有办法从 schema.rb 自动化这个过程?我有大约 20 张表,每张表有大约 10 列。如果可能的话,不想手动编写名称和属性。 - Derek
你只需要关注表格本身,使用它们的列就可以了。我不确定你是否可以在不影响与此数据库一起工作的其他应用程序的情况下更改列。至于自动化方面,我会考虑一下...如果我找到有用的东西,我会更新我的答案。 - rmagnum2002
哦,我没有考虑更改列名。现在我甚至没有模型文件,因为我是倒着做的。所以我必须输入所有内容,包括 attr_accessible 的内容,因此我希望有一些东西可以自动生成所有的模型代码。 - Derek
在设置表名时,是否有意使用反引号(`)? - Bruce Sun
@BruceSun 我非常确定应该是逗号。 - rmagnum2002

-3

刚刚从Rails转到Django,让你的生活更加愉快,也让你的工作变得正常:

$ python manage.py inspectdb my_table_without_existing_model > some_new_model.py

够了。只需要两秒钟的工作 :)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接