2012-11-01 60 views
0

我有一个关系数据库的模式,我想在我的Ruby on Rails 3.2.8项目中生成脚手架。我发现的文档相当混乱,虽然,我的努力到目前为止都失败了,所以我的问题是究竟如何我去产生所需的脚手架/型号为以下模式:如何使用Rails生成此模式?

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

+0

部分我一直困惑的是什么东西需要包含在'rails generate scaffolding'中 - 我需要包含'posts_id:integer'吗?它是'后:参考'?许多博客文章和问题都有不同的答案,我没有找到非常明确的文档。 – BenjaminRH

回答

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一代很不错,我建议您查看实际的DB /生成的迁移文件,并添加更多的索引等等

如果您不想在默认情况下指标,只是生成使用model_name_id:integerserie_id:integer(注意单数形成这里)

我还会考虑重新命名您的关联表是单数:TagPostTagSerie,因为它是一个Tag以及一个SeriePost

另外注意,产生的自动栏杆时符合外国之间的关联键,你的模式默认命名为model_name_id,而不是id_users。所有这些都可以改变,但让Rails弄清楚所有的东西会更容易。约定优于配置是Rails的一大优势。

+0

编辑与解释 –

+0

辉煌!这是完美的。我非常感谢你 - 你为我节省了相当多的时间和麻烦。 – BenjaminRH

+0

尽管你对“Serie”的使用有疑问 - 我相信正确的单数是“Series”,也是复数。 Rails的多元化是否足够先进以知道? – BenjaminRH

1

我改变了您的字段名称的视图,以便rails可以自动创建表格refrences(而不是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_serieslink(s)或别的东西。我建议你看看http://guides.rubyonrails.org/migrations.html。它应该清除很多关于命名约定,模型和迁移的信息。