読者です 読者をやめる 読者になる 読者になる

10000hの技術メモ

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

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

Progate Ruby on Rails

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)〜セッターを省略しよう・ストロングパラメータ

Progate Ruby on Rails

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

Progate Ruby on Rails

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

Progate Ruby on Rails

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とは?

Progate Ruby on Rails

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章 投稿機能を作ろう〜投稿データを更新しよう・投稿の削除機能を追加しよう

Ruby on Rails Progate

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

目次

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

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

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

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

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

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

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

Ruby on RailsⅡ(道場コース)1章 投稿機能を作ろう〜投稿の編集ページを作ろう

Progate Ruby on Rails

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

目次

投稿の編集ページを作ろう

個別の投稿ページに「編集」ボタンを付けて、そこから編集ページに飛べるようにする。 編集ページにはフォームが2つあって、初期値に現在の投稿が入っている状態。あとは保存ボタン。

routes.rb

get '/notes/:id/edit' => 'notes#edit', as:'edit_note'

を追加。

編集ボタンの追加はRuby on RailsⅡ3章 投稿を編集、削除しよう - 10000hの技術メモ参照。

edit.html.erbの中で、フォームの初期値としてタイトルとコンテンツを設定するやり方を忘れていた。

  • text_field_tag
  • text_area_tag

だった。 Ruby on RailsⅡ3章 投稿を編集、削除しよう - 10000hの技術メモ

あとはeditアクション等作って、確認。

・・・したらFailした。 どうもフォームに適切なクラス名を付けていなかったらしい。 上記で引用した学習メモの時点で付けていなかったので、前のレッスンではクラス無しでも通ってしまっていた模様。

text_field_tagでクラスを指定

参考:text_field_tag - リファレンス - - Railsドキュメント

text_field_tag(要素名 [, 値, オプション])

のように使う。

たとえば

<%= text_field_tag :title, @note.title, class:'form-control title-field' %>

ここを設定してあげて、やっとformに初期値を出せた。

まだまだcontrollerとviewとの間での値の受け渡しが理解できていなさそう。

今回の勉強時間:50分 累計勉強時間:6時間46分