0

我有一个关系数据库的模式,我想在我的 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

架构图片

4

2 回答 2

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:integerlike生成serie_id:integer(注意这里的单数形式)

我还考虑将您的关联表重命名为单数:因为它是 aTagPost与a或 a之间的关联TagSerieTagSeriePost

另请注意,在生成符合 Rails 的自动外键时,默认情况下它们将被命名model_name_id,而不是id_users您的架构提到的。所有这些都可以更改,但更容易让 Rails 为您解决所有问题。约定优于配置是 Rails 的一大优势。

于 2012-11-01T12:33:46.537 回答
1

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

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_serieswill belink(s)或其他名称。

我建议你看看http://guides.rubyonrails.org/migrations.html。它应该澄清很多关于命名约定、模型和迁移的内容。

于 2012-11-01T12:40:00.987 回答