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分