我有一个现有的数据库(Postgresql)。我怎样才能从中创建模型?我如何传递Rails的列名?好像这样:
人:
名称:table_name_for_name_attribute 姓:table_name_for_surname_attribute PersonalCode:table_name_for_perconal_code_attribute
不幸的是,我的数据库不遵循Rails约定,因为并非所有表都以英语命名。任何想法我怎么能映射它?
UPDATE reverse_scaffold脚本只生成模型,但我也需要控制器和视图表单。
答案 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,它有一个类似的最终结果。但是更加健壮,更容易适应模型变化。