我有一个关系数据库的模式,我想在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
答案 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
进行生成(请注意这里的单数形式)
我还考虑将您的关联表重命名为单数:TagPost
和TagSerie
,因为它是Tag
与Serie
或{{}之间的关联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。它应该清楚了解命名约定,模型和迁移。