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分