見出し画像

写真投稿機能の作成

投稿する際に画像は最近ではどうじに送ることが標準となっているため、データベースに保存できる方法を記載する。

外部キー

リレーショナルデータベースの主キー(プライマリキー)は、データを一意に特定するカラムのこと
リレーショナルデータベースには、もう1つ「外部キー」というものがある
外部キーというのは、「他のテーブルの主キー」を保存するカラム

画像の扱い方

画像はデータベースに画像を直接保存せず、参照先を保存しておく
画像は違うところに保存しておき、画像があるパスやURLの文字列をデータベースに保存

Topicモデルの作成

$ rails g model Topic user_id:integer description:string image:string
migrationファイルをデータベースに適用させるために、以下のコマンドを実行
$ rails db:migrate
バリデーションを追加
app/models/topic.rb

モデルの関連付け(アソシエーション)

UserとTopicの関係を表すと「Userは投稿をいくつもすることができる」つまり「Userは何個かのTopicを持っている」
コードで実現するには、2つの条件があり、
関連先のモデルのidを格納するカラムを持つ(今回の場合user_id)
has_many、belongs_toをモデルに書く
Topicから見た関連と、Userから見た関連の2つの関連をモデルに持たせる
上記をアソシエーションを設定するという
Topicから見た関連である「それぞれのtopicは1つのuserを持つ」ことは「belongs_to」で関連付け
Userから見た関連である「1つのuserは複数のtopicを持つ」ことは「has_many」で関連付け
models/user.rb
has_many :topics

画像投稿機能の作成

画像投稿機能の作成には「CarrierWave」というgemを使用
画像をアップロードするためのコードを生成していく
$ rails g uploader image
app/uploaders/image_uploader.rbが生成
configにあるapplicatoin.rbに以下を追加
config/application.rb
画像をアップロードするモデル、今回の場合はtopic.rbに以下のコードを追加
app/models/topic.rb
コントローラーを作成
$ rails g controller topics new
ルーティングを追加
config/routes.rb
コントローラーに「追加」の処理を書いていく
app/controllers/topics_controller.rb
投稿一覧表示
投稿された写真を一覧表示する機能を追加します。
app/controllers/topics_controller.rb

Github
https://github.com/simesime3/pictgram/commits/master
覚える機能が多すぎて使っているだけになっているような気がする昨今です。

この記事が気に入ったらサポートをしてみませんか?