10000hの技術メモ

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

Ruby on Rails Ⅲ 2章 scaffoldのコードに近付けよう(1)〜フォームに初期値を入れよう - エラーメッセージを表示しよう

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

目次

フォームに初期値を入れよう

前にやった気もするけれども、今回は「バリデーションチェックを通らなかったときに、さっき入力していた値をフォームに入れておこう」という趣旨。

saveに失敗した時の初期値

createアクションで@noteに値がセットされているので、@note.titleで初期値を表示できる。

newアクションを経由した場合の初期値

newアクションで中身が空の@noteを定義する

・・・演習がコピペで終わった

エラーメッセージを表示しよう

何がダメでやり直しさせられてるのか、ユーザにお知らせしたい。

バリデーション失敗時、エラーメッセージは同時に作られる。(!)

内容は @note.errors.full_messagesに入っている。

取得の仕方

<% @note.errors.full_messages.each do |message | %>
<%= message %>

こんな感じ。

full_messages以外のメソッドはどんなのがあるの?という疑問が出て少し調べたのでメモ。

参考:Active Record バリデーション | Rails ガイド

「エラーが一つでもあれば表示する」の書き方

<% if @note.errors.any? %>

<% end %>

エラーメッセージを出すと、「なんかそれっぽいものが出来てきた」という気になれるので良い感じ。 見た目もbootstrapで綺麗だし。

今回の勉強時間:16分 累計勉強時間:8時間52分

Ruby on Rails Ⅲ 2章 scaffoldのコードに近付けよう(1)〜バリデーションをかけよう - render

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

目次

バリデーションをかけよう

テストエンジニアとしては気になるところ。

ユーザの入力値をチェックする。空でないかどうかなど。

バリデーションはモデルで設計する。

validates :title, presence: true
validates :content, presence: true, length: { maximum: 140 }

render〜ビューを出力しよう〜

バリデーションの結果によって処理を変える。

パスの省略

redirect_to note_path(@note.id)

これを

redirect_to note_path(@note)

こうして

redirect_to @note

こうじゃ

render

renderメソッドを使うと、指定したビューファイルをブラウザに表示する。

バリデーションで失敗したら、もう一度new.html.erbを出せる。

render :new

今回の勉強時間:21分 累計勉強時間:8時間36分

Ruby on Rails Ⅲ 2章 scaffoldのコードに近付けよう(1)〜セッターを省略しよう・ストロングパラメータ

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

目次

セッターを省略しよう

scaffoldで作ったコードではセッターが使われていない、なぜか。

→newメソッドの引数にハッシュを取っているから。

@note = Note.new(title: params[:title], content: params[:content])

といった具合。

ストロングパラメータ

↑でセッターを省略できたはいいが、titleとかcontentとかをそれぞれセットするのはめんどくさい。まとめて受け取って、まとめてセットできるほうが嬉しい。

悪いやり方

<input name = "note[title]">
<textarea name = "note[content]">

に変更して、コントローラは

@note = Note.new(params[:note:)

で受け取る。

これだとどんな値でもセットできてしまい、セキュリティ的に禁止されている。

そこでストロングパラメータ。

ストロングパラメータの使い方

params.require(paramsのキー).permit(保存を許可するカラム1,  保存を許可するカラム2, ...)

今回の勉強時間:20分 累計勉強時間:8時間15分

Ruby on Rails Ⅲ 2章 scaffoldのコードに近付けよう(1)〜before_action

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

目次

before_action

scaffoldで作られたコントローラから学ぶ。

scaffoldで作られたコントローラ内のアクションで、

@note = Note.find(params[:id])

が無く、いきなり@noteを使っている。なぜこんなことができるのかを解説。

各アクションで同じように@noteを定義していると重複なので、一つのメソッドset_noteにまとめる。

def set_note
  @note = Note.find(params[:id])
end

これを、

before_action:set_note

で呼び出すと、全てのアクションの最初でset_noteが呼ばれる。

「全てだとちょっと・・・」というときには

before_action:set_note, only: [:show, :edit. :update, :destroy]

set_noteはprivateで定義する。

明日も仕事なので、今日は少しで。

今回の勉強時間:12分 累計勉強時間:7時間55分

Ruby on Rails Ⅲ 2章 scaffoldのコードに近付けよう(1)〜resources

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

目次

railsⅡで書いたコードをscaffoldに近づけていく。自動生成されたコードはお手本になるので、意味を1つずつ確認していく。

resources

resourcesを使うと、7つのルーティングが自動生成される=getやpostを使って一つずつ書かなくともよい

使い方はroutes.rb

resources :コントローラ名

この状態でrake routesすると

※コピペだと綺麗に表示できなかったので、画像で済ます。

あとは、元々railsⅡで作っていたときとパスが変わっているので、現状に合うように書き換える。 ・・・この辺手間なので、普通に開発してて「変えたい」と思った時のために、少ない手間でさっと修正できるような仕組みはなんだろうか。何かのIDEがやってくれる?

今回の勉強時間:21分 累計勉強時間:7時間43分

Ruby on Rails Ⅲ 1章 scaffoldとは?

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

章の目次

  • scaffoldとは?
    • CRUDとscaffold

このレッスンでは、RailsⅡで書いたコードをよりよいコードにしたり、リファクタリングを行ったりしていきます。 また、RailsⅡで作成したような機能を簡単に作ることのできるコマンドを身につけていきます。

→本とかだといきなりscaffold使っての説明だったりするので、一度便利機能を使わずやってから「面倒だよね?実は簡単にする方法があるんですー」のほうが身につく気がする。コレは良い。

CRUDとscaffold

CRUDとは・・・Create, Read, Update, Delete。(ここは一般教養)

RailsⅡでは自分で作っていたようなCRUDの機能は、scaffoldを使うと自動生成してくれる。

rails g scaffold モデル名 カラム:データ型 (カラム:データ型 ...)

scaffoldで生成されるもの

  • コントローラ
  • モデル
  • ビュー 上記に加えてルーティングも設定される(resourcesというのを使う)

sampleをつくる

rails new sample
rails g scaffold Note title:string content:text
rake db:migrate
rails s

とここまでやってlocalhost:3000/notesにアクセスすると、自分ではまだ何もしていないけど、Notesページが出来上がってる。 しかもNew Noteリンクまであって、ノートが作れるし、一覧表示もされる。

前に本で読んだscaffoldの便利さが今ならわかる・・・。

今日は残業で遅かったからここまで!

今回の勉強時間:12分 累計勉強時間:7時間22分

Ruby on RailsⅡ(道場コース)1章 投稿機能を作ろう〜投稿データを更新しよう・投稿の削除機能を追加しよう

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

目次

投稿データを更新しよう・投稿の削除機能を追加しよう

編集ボタンを押してeditページに行くところまで前回作った。 今回はフォームの内容を変更したのち、保存ボタンを押下して更新するところまで。

やったことはそのまんまRuby on RailsⅡ3章 投稿を編集、削除しよう(その2) - 10000hの技術メモを。

だんだんnotes_controller.rbでやってる意味が分かってきた。

ここまでで道場コースの2を完了。 完了とは言いつつも、まだ前のスライドやメモ記事を見ながら写してる部分も多くて、たぶんあと何回かやらないと本当に完了とは言えないかな。

とはいえ、何度でも見返せるのがProgateの良いところなので、お金払ってる分最大限に使う姿勢で。

今回の勉強時間:24分 累計勉強時間:7時間10分