2012-11-01 102 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。它應該清除很多關於命名約定,模型和遷移的信息。