如何使用Rails生成此架构?

时间:2012-11-01 12:20:36

标签: ruby-on-rails ruby-on-rails-3 relational-database

我有一个关系数据库的模式,我想在Ruby on Rails 3.2.8项目中生成脚手架。我发现这些文档很混乱,到目前为止我的努力都失败了,所以我的问题是我如何为下面的模式生成所需的脚手架/模型:

USER
name:string
email:string
-----
has_many: posts

TAG
name:string
-----
belongs_to_and_has_many: series
belongs_to_and_has_many: posts

POST
title:string
body:text
-----
belongs_to_and_has_many: tags
belongs_to: user
belongs_to: category

SERIES
name:string
website:string
-----
belongs_to_and_has_many: tags

CATEGORY
name:string
-----
has_many: posts

Picture of schema

2 个答案:

答案 0 :(得分:2)

我们走了:

rails g scaffold User email:string password:string
rails g scaffold Category name:string
rails g scaffold Post title:string body:text category:references user:references
rails g scaffold Tag name:string
rails g scaffold TagsPost post:references tag:references
rails g scaffold Serie name:string website:string
rails g scaffold TagsSerie serie:references tag:references

我在这里使用references因为它具有为您自动生成列索引的额外好处。虽然数据库生成很好,但我建议您查看生成的实际db / migrations文件并添加更多索引等...

如果您不想默认使用索引,只需使用model_name_id:integer serie_id:integer进行生成(请注意这里的单数形式)

我还考虑将您的关联表重命名为单数:TagPostTagSerie,因为它是TagSerie或{{}之间的关联1}}

另外要注意,在生成符合自动轨道的外键时,默认情况下,它们会在您的架构提及时命名为Post而不是model_name_id。所有这一切都可以改变,但Rails更容易让你找到一切。约定配置是Rails的重要优势之一。

答案 1 :(得分:1)

我更改了您的字段名称视图,因此rails可以自动创建表格引用(而不是id_categories它应该是category_id aso ...)。

rails g scaffold user email:string password:string (will most likely be password_digest:string)
rails g scaffold category name:string
rails g scaffold post title:string body:string category_id:integer user_id:integer
rails g scaffold tags_posts post_id:integer tag_id:integer
rails g scaffold serie name:string website:string
rails g scaffold tag name:string
rails g scaffold tags_series tag_id:integer series_id:integer

作为个人偏好,我也不会将tags_posts用作表格名称,我会称之为tagging(s),tags_series也是link(s)或其他什么。

我建议你看一下http://guides.rubyonrails.org/migrations.html。它应该清楚了解命名约定,模型和迁移。