【Rails応用講座 10】オピニオン >
オピニオンの基礎作成

では、オピニオンの基礎部分をクラス図をもとに作成していきましょう。まず最初に、以下コマンドで新たにブランチを作成して下さい。

# ターミナル

$ git checkout -b create-opinion

1.クラス図の確認

まずはクラス図の確認を行います。オピニオンはユーザーとクリップに属しているモデルです。属性として、ユーザーとクリップのidを持っています。

2.Scaffoldで作成

今回オピニオンは、先ほどのクラス図をもとに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

3.関連付けを追加

次に、関連付けを追加します。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で関連付けを行った際に自動で記述されています。

4.routesの設定

routes.rbでの設定は以下のように、do~endの中に記述します。オピニオンはユーザーとクリップに属しているので、このように入れ子となります。

# routes.rb

resources :clips do
  resources :opinions
end

このようなroutes.rbでの設定内容は、以下URLにアクセスすれば確認する事が出来ます。

localhost:3000/rails/info

5コンソール.ターミナルコンソールで試す

以下を参考に、ターミナルでオピニオンを作成してみて下さい。ユーザーやクリップに属するオピニオンの作成が行えるはずです。

1.clipを作成する

コンソールを起動させたら >clip = Clip.first でクリップを作成します。

> clip = Clip.first

2.userを作成する

次に、> user = User.first でユーザーを作成します。

> user = User.first

3.opinionを作成する

ユーザーに紐づけたopinionを作成しましょう。

> opinion = user.opinions.build(
                  title: "test", body: "test opinion", clip: clip)

4.opinionを保存する

> opinion.save

でopinionを保存します。

5.userに紐づいた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 [スキルハブ]では無料の動画講座を多数公開しています。他校だと数万円するような講座が無料で受講できます。

無料講座一覧を見る