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 生成は素晴らしいですが、生成された実際の db/migrations ファイルを確認し、さらにインデックスなどを追加することをお勧めします ...

デフォルトでインデックスが必要ない場合は、model_name_id:integerlikeを使用して生成するだけですserie_id:integer(ここでは単数形に注意してください)。

また、関連付けテーブルの名前を単数形に変更することも検討します。これは、 aTagPostとaまたは aTagSerieの間の関連付けであるためですTagSeriePost

また、レールに準拠した自動外部キーを生成する場合、スキーマで言及されているものではmodel_name_idなく、デフォルトで名前が付けられることに注意してください。id_usersこれらはすべて変更できますが、Rails にすべてを理解させる方が簡単です。設定より規約は、Rails の大きな強みの 1 つです。

于 2012-11-01T12:33:46.537 に答える
1

レールがテーブル参照を自動的に作成できるように、フィールド名のビューを変更しました(aso...の代わりにid_categoriescategory_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

個人的な好みとして、私はテーブル名としても使用しません。私はそれを(s)tags_postsと呼びます。taggingtags_serieslink(s)

http://guides.rubyonrails.org/migrations.htmlをご覧になることをお勧めします。命名規則、モデル、および移行について多くのことが明らかになるはずです。

于 2012-11-01T12:40:00.987 に答える