10000hの技術メモ

この先生きのこるための勉強内容&時間記録

Ruby on RailsⅡ1章 投稿機能を作ろう 〜投稿データの保存・データベースの構造

20170213@home Progate | プログラミングの入門なら基礎から学べるProgate[プロゲート]

目次

投稿データの保存

  • モデルとテーブルは対応関係
  • モデルはクラスにあたるもの

セッターとゲッター

セッターとゲッターはコントローラやビューから自由に呼び出せる。

→Ruby上級編に説明があるらしいので、後で見る

noteテーブルにデータを保存する。

  1. Noteインスタンスを生成
  2. セッターで値をセット
  3. saveメソッドを呼び出す

データベースの構造

console機能

モデルを操作してDBの中身を見られる。

rails console

gemのインストール

突然のgem

hirbというgemを入れると、rails consoleが見やすくなる。 (手順どおりにやったら”入れないとどのくらい見づらいか”を見る前にhirbを入れたので、見やすかった・・・)

今回の勉強時間:13分 累計勉強時間:1時間50分

Ruby on RailsⅡ1章 投稿機能を作ろう 〜モデルとデータベース

20170212@home Progate | プログラミングの入門なら基礎から学べるProgate[プロゲート]

目次

データを保存したい

ここまで作ったものでは、投稿内容は保存されていないのですぐ消えてしまう。 それではWebアプリとしては意味が無いので、当然データは保存しないといけない。

データを保存するためには、モデルとデータベースが必要。

モデルは何をする?

コントローラから指示を受けて、データベースへのデータ保存・データ取り出しを行う。

モデルとデータベースの作りかた

rails generate model モデル名 カラム名:データ型

実行すると、app/models/モデル名.rbが作成される。

rake db:migrate

データベース生成。

ここまでで準備が出来た。 次は、今回作ったDBにデータを保存する部分。

今回の勉強時間:8分 累計勉強時間:1時間37分

Ruby on RailsⅡ1章 投稿機能を作ろう 〜投稿の表示

20170212@home Progate | プログラミングの入門なら基礎から学べるProgate[プロゲート]

目次

投稿を表示する

一つ前のレッスンでは終わりが釈然としなかったものの、今度こそ自分が投稿したものを表示できるはず。

フォームの入力値に名前をつける

inputタグにname属性をつける。

入力値を受け取る

def create
    @title = params[:title]
end

変数titleに、name=titleの要素の値を代入している、でOKなのかな?

疑問:nameが重複していたらどうなる?

やったこと

notes_controller.rb のcreateアクションで@title, @contentに投稿画面でユーザが入力した内容を渡して、 それをcreate.html.erbで受け取って表示させた。

で、正しく動いた。

ここまでで、無料会員で受けられるレッスンが終了。

今回の勉強時間:8分 累計勉強時間:1時間29分

Ruby on RailsⅡ1章 投稿機能を作ろう 〜投稿の表示の準備

20170212@home Progate | プログラミングの入門なら基礎から学べるProgate[プロゲート]

目次

投稿表示

前回作ったフォームで投稿した内容が表示されるページをつくる。

投稿を表示するために、
①ルーティング
②アクション
③ビュー
の設定を行いましょう。

ルーティングの設定

routes.rbに

post '/notes' => 'notes#create'

を追加

アクションの設定

notes_controller.rbに

def create
end

を追加。

ビューの設定

new.html.erbに

<%= form_tag notes_path do %>

notes_pathを追加して、フォームの内容がnotes#createに送られるようにする。

試しに投稿してみると・・・

!!!!無事失敗!!!! そうこなくては。

エラーメッセージを見るに、 gatebook/app/views/notes/create.html.erbが無いとダメって言っている気がする。 が、このセクションが「投稿の表示の準備」なので、おそらく次のセクションで↑のファイルは作るはず・・・。 でも手順では「新規投稿ページから試しに投稿をしてみよう」と言ってる。 まさかエラーでる状態でセクションを終えて、次で「さっきはエラーが出たはずだ!まずはコレを消していこう!」とか言い始める・・・?

「まさか」と思ったそのまさかだった・・・

今回の勉強時間:22分 累計勉強時間:1時間21分

Ruby on RailsⅡ1章 投稿機能を作ろう 〜フォームを作ろう

20170212@home

目次

投稿機能の作成

  • 投稿の作成
  • 編集
  • 一覧機能
  • 削除

といった基本機能の作成。

このへんは何を作るにも必要になってくるだろう部分なので、押さえる。

notesコントローラを作る

rails generate controller notes new

フォームを作る

form_tagヘルパーを使う。

その他、CSSで見た目を変えて、ヘッダのナビゲーションにリンクを追加して、フォーム(機能は乗っていないもの)ができた。

最初、フォームが出来たものの見た目が変なままだったので、何か間違えたのかと色々見てみたけど、そうこうしてるうちにちゃんと表示されるようになった。 たぶんProgate側で、コード変更時の反映までに微妙なタイムラグがあるのかも。

今回の勉強時間:11分 累計勉強時間:59分(惜しい!)

Ruby on Rails Ⅰ2章 Railsの基礎を学ぼう 〜Railsにおけるレイアウト

20170212@home

目次

top.html.erbなどのビューにはタグやタグが書かれていません。Railsには「application.html.erb」というビューの共通部分をまとめたファイルがあり、タグのような、どのビューでも必要なコードはここに書きます。

どのビューでも必要なコード、とは、ヘッダーやフッターなど。サイト全体で表示する箇所。

疑問:じゃあ「このページでだけヘッダのこの部分を出したくない」といった場合はどうするのか。

ヘルパー

  • stylesheet_link_tag
  • javascript_include_tag

エキュリティのためのタグ?

javascript_include_tagの説明に「セキュリティのためのタグ」と書いてあった。どういうことか。 CSRF=リクエスト強要を防ぐためにRails側が対策をしてくれる。

参考:IPA ISEC セキュア・プログラミング講座:Webアプリケーション編 第4章 セッション対策:リクエスト強要(CSRF)対策 (IPAのサイトなので信用できるはず。)

Ruby on Railsの他にもCakePHPなどがCSRF対策用の仕組みを提供しているとのこと。

演習を終えて、終了。

今回の勉強時間:18分 累計勉強時間:48分

Ruby on Rails Ⅰ2章 Railsの基礎を学ぼう 〜Railsにおけるリンクの書き方

20170211@home

Railsでページ間のリンクを設定する方法

link_toヘルパーを使う。

<%= link_to "表示するテキスト", "URL" %>

link_toの引数はカッコ()を付けて書けるし、省略することもできる。 省略したときは半角スペースを入れる。

名前付きルート

ターミナルで

rake routes

コマンドで確認できる。

about GET /about home#about

の場合、 about_path/aboutを指す。

rootパス

root 'コントローラ名#アクション名'

やってみたが・・・

こんなエラーが発生。 ヒントから「答えを見る」して、解答をコピペしても変わらずだった。

もしかして

localhost:3000/topにアクセスしようとしていたのが間違っていたらしい。 localhost:3000/にアクセスするとtopが開かれるのが正解。

でもlocalhost:3000/topを直接叩くと↑のエラーが出るのもそれはそれで対応が必要なのでは。

今回の勉強時間:30分