Rails:定义要建模的列名

时间:2009-10-26 07:10:03

标签: ruby-on-rails database model

我有一个现有的数据库(Postgresql)。我怎样才能从中创建模型?我如何传递Rails的列名?好像这样:

人:

名称:table_name_for_name_attribute 姓:table_name_for_surname_attribute PersonalCode:table_name_for_perconal_code_attribute

不幸的是,我的数据库不遵循Rails约定,因为并非所有表都以英语命名。任何想法我怎么能映射它?

UPDATE reverse_scaffold脚本只生成模型,但我也需要控制器和视图表单。

3 个答案:

答案 0 :(得分:1)

您可以使用table_name方法定义与模型不匹配的表名。

class MyModel < ActiveRecord::Base
    def self.table_name
        'my_table_name'
    end
end

将'my_table_name'的值更改为有效的表名。

要使用自动方法生成控制器和视图以创建,更新,删除和查看数据库对象,您应该创建一个脚手架。有关rails guides的一些非常好的文档。

答案 1 :(得分:1)

在您的模型中,如果不遵循约定,您需要告诉ActiveRecord表名和主键字段列的名称。

class MyLegacyTable < ActiveRecord::Base
  self.table_name = "some_name"
  self.primary_key = "some_name_primary_key_field"
end

完成后,ActiveRecord会将some_name_primary_key_field知道为id,这会让生活变得更轻松。

答案 2 :(得分:0)

Rails在连接到数据库时不需要知道它们列出的列名。

正如其他人所说,你可以在模型中指定一个表名。

至于生成控制器/视图,你几乎拥有自己的控制器/视图。脚本/生成脚手架已弃用。它仍然可以创建,但您需要在命令行上传递所有列名称和时间。

相反看看ActiveScaffold Plugin,它有一个类似的最终结果。但是更加健壮,更容易适应模型变化。