では、オピニオンの基礎部分をクラス図をもとに作成していきましょう。まず最初に、以下コマンドで新たにブランチを作成して下さい。
# ターミナル
$ git checkout -b create-opinion
まずはクラス図の確認を行います。オピニオンはユーザーとクリップに属しているモデルです。属性として、ユーザーとクリップのidを持っています。
今回オピニオンは、先ほどのクラス図をもとにScaffoldで作成します。以下のコマンドを実行して下さい。
$ rails g scaffold Opinion title:string body:text clip:references user:references
~ #scaffolds.scssが重複して作成されてしまう為上書きするか聞かれる
conflict app/assets/stylesheets/scaffolds.scss
# n と打ちエンターを押す
Overwrite ~/scaffolds.scss? (enter "h" for help) [Ynaqdh] n
マイグレートします。
$ rails db:migrate
次に、関連付けを追加します。user.rbとclip.rbにhas_manyを記述して下さい。
# user.rb
has_many :opinions, dependent: :destroy
# clip.rb
has_many :opinions, dependent: :destroy
# opinion.rb
belongs_to :clip
belongs_to :user
Modelにdependent: :destroyが設定されていると、削除する際にその関連も含めて削除してくれます。
opinion.rbファイルの中身はscaffoldで関連付けを行った際に自動で記述されています。
routes.rbでの設定は以下のように、do~endの中に記述します。オピニオンはユーザーとクリップに属しているので、このように入れ子となります。
# routes.rb
resources :clips do
resources :opinions
end
このようなroutes.rbでの設定内容は、以下URLにアクセスすれば確認する事が出来ます。
localhost:3000/rails/info
以下を参考に、ターミナルでオピニオンを作成してみて下さい。ユーザーやクリップに属するオピニオンの作成が行えるはずです。
コンソールを起動させたら >clip = Clip.first でクリップを作成します。
> clip = Clip.first
次に、> user = User.first でユーザーを作成します。
> user = User.first
ユーザーに紐づけたopinionを作成しましょう。
> opinion = user.opinions.build(
title: "test", body: "test opinion", clip: clip)
> opinion.save
でopinionを保存します。
ここで、今登録したopinionを確認してみましょう。
bodyの中身を確認する
> opinion.body #=> test opinion
opinionが紐づいたuserを確認する
> opinion.user #=> first user
opinionが紐づいたclipを確認する
> opinion.clip #=> first clip
すべてまとめたものは以下になります。
> clip = Clip.first
> user = User.first
> opinion = user.opinions.build(
title: "test", body: "test opinion", clip: clip)
> opinion.save
> user.opinions #=> 1オピニオン登録されている
> opinion.body #=> test opinion
> opinion.user #=> first user
> opinion.clip #=> first clip
オピニオンを実装して、ターミナルで操作してみましょう。
無料ビデオ講座のお知らせ
Skillhub [スキルハブ]では無料の動画講座を多数公開しています。他校だと数万円するような講座が無料で受講できます。