超絶駆け出しエンジニアの備忘録
超初心者がスクールの教材やネット検索を駆使して、不格好なブログアプリを作成する道のり その6
fontawesomeの利用
fontawesomeをCDNから利用します。
app/assets/stylesheets/application.scsstに
@import "scaffolds";
@import "posts";
@import url("https://use.fontawesome.com/releases/v5.8.2/css/all.css");
を記述
タグの実装
アップしたブログにタグ付けできるようにします。
rails g scaffold tag name:string user:referenceコマンドを実行します。
マイグレーションを確認してみます。
db/migrate/作った日付_create_tags.rbをみると
となっています。
このままでもいいのですが、上記のままだとタグ付けしないとfalse扱いになってしまうので、
null: false,
だけ削除します。
そして
rails db:migrate
コマンドでマイグレートします。
postモデルとtagモデルの多対多の関係性を記載する
app/models/post.rb に
has_many :post_tags
has_many :tags, through: :post_tags
accepts_nested_attributes_for :post_tags
を追記。
一個ずつ紐解いていくと
has_many :post_tags で
post と post_tagsの関係性を記述
has_many :tags, through: :post_tags で
post と tagsの関係性を記述。
ここはデータの「多対多」の中間テーブル(post_tags)を介しているからですね。
詳しくは以下サイトで中間テーブル説明されています。
やさしい図解で学ぶ 中間テーブル 多対多 概念編 - Qiita
accepts_nested_attributes_for :post_tags で
親モデルの更新時、子モデルもまとめて更新されるようになります。
続いて、tagモデルを編集します。
app/models/tag.rb に
belongs_to :user
has_many :post_tags, dependent: :destroy
has_many :posts, through: :post_tagsvalidates :name, presence :true
validates :name, uniqueness :ture
を追記します。
これも一つずつ紐解いて行きます。
has_many :post_tags でtagとpost_tagsの一対多の関係を記述
dependent: :destroy でオブジェクトが消去される際、関連するオブジェクトも一緒に消去されるので、Tagが消去された時にTagと同じtag_idをもつPost Tagを消去することになります。
詳細は以下に記述があります。
Active Record の関連付け - Railsガイド
has_many :posts, through: :post_tags でpost_tagsを通してpostとは多対多の関係を記述します。
validates :name, presences :true
validates :name, uniqueness :true
でカラのタグができないように。
同じ名前のタグがいくつもできないようにしました。
post_tagモデルの編集
app/models/post_tag.rb を
class PostTag < Application
belongs_to :post
belongs_to :tag
validates :post_id, :uniqueness => { :scope => :tag_id }
end
と記述します。
validates :post_id, uniqueness => { :scope => :tag_id } で
一つのpostに対して同じtagが複数つかないように。
また、超絶駆け出しエンジニアなので、突っ込みどころがあればご指導・ご鞭撻いただけると幸いです。