0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Ruby on Rails チュートリアル 第2章②

Last updated at Posted at 2020-05-05

○この記事の要点
「第2章 Toyアプリケーション」の途中から最後まで実施内容メモ
思ったことなどのメモ

○内容
■モデルの作成続き
(1)scaffoldジェネレータを利用したマイクロポストリソースの作成
 rails generate scaffold Micropost content:text userid:integer
(2)データベースのマイグレート
 rails db:migrate
ここまですると、routesファイルが更新され、マイクロポストのWebアプリケーションが動作する
(3)contentに文字数制限を設定する
 app/models/micropost.rb
validates :content, length: { maximum: 140 }
(4)Micropostsとユーザの紐づけ
 1.app/models/user.rb に has_many :microposts
 ※ユーザは複数のマイクロポストを持っている
 2.app/models/micropost.rb に belongs_to :user
 ※マイクロポストはユーザーに所属する

Railsのconsoleでユーザーとマイクロポストの関連付けを確認するところでうまくいかなかった。

エラー
2.6.3 :009 > first_user.microposts
  Micropost Load (0.3ms)  SELECT  "microposts".* FROM "microposts" WHERE "microposts"."user_id" = ? LIMIT ?  [["user_id", 1], ["LIMIT", 11]]
Traceback (most recent call last):
ActiveRecord::StatementInvalid (SQLite3::SQLException: no such column: microposts.user_id: SELECT  "microposts".* FROM "microposts" WHERE "microposts"."user_id" = ? LIMIT ?)

対処:micropostsにuser_idなんてカラムがない。ということだったので、DBのマイグレートでスペルミスってたっぽい。よく見たら、micropostsのuser_id⇒useridで作成していた。削除方法をググって再作成。。。

削除:rails destroy scaffold "Micropost"
再作成:
rails generate scaffold Micropost content:text user_id:integer
rails db:migrate
rails servere

Webアプリ起動したらエラー

エラー
ActiveRecord::PendingMigrationError

キーワードでググったら、rails db:migrate:reset しろとのこと。
実行後、rails db:migrate を実行したら
Webページが開いた!登録したユーザなどは消えた。rails db:migrate:resetで消えるらしい。あと、141文字以上のバリデーションチェックとかも消えた

Railsのconsoleでの
first_user.microposts 結果も正しく返ってきた。

■継承の階層(説明)
UserモデルとMicropostモデルはいずれも、ApplicationRecordというクラスを継承している。
UsersコントローラとMicropostsコントローラはいずれもApplicationControllerを継承している。
継承により、そのクラスファイルがよく利用する標準の機能を別途用意せずにも役割をこなしてくれる。

継承
# モデル
class User < ApplicationRecordclass
class Micropost < ApplicationRecord
#コントローラ
class UsersController < ApplicationController
class MicropostsController < ApplicationController

■アプリケーションのデプロイ
$ git status
$ git add -A
$ git commit -m "Finish toy app"
$ git push
$ git push heroku
$ heroku run rails db:migrate

HerokuサーバでWebページが動作することを確認して終了。

■ScaffoldでWebアプリを作成した際の良い点、悪い点
良い点:簡単。雰囲気を味わえる。
悪い点:機能が少ない。セキュリティの仕組みが全くない

■感想
・スペルミスというあるあるの発生で少し時間がかかった。削除から再実行を自分で調べて実施したが、マイグレートのところで少し躓いた。マイグレートでは、バージョン管理?的なことをやっているっぽく、整合しなくなるとエラーになるようだ。
・ここにきて少しSQLを感じた。今回だと、ユーザテーブルとマイクロポストテーブルをuser_idでリレーションしているが、外部キーを設定した記憶がないが、自動で設定されている?
・最後は継承。Java時代から便利だと思っていたが、Railsでももちろん使われている。遠い将来全てが継承でコーディングしなくてよくなる未来が来る!?

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?