Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
validationについて
Search
ryonext
December 16, 2015
Programming
870
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
validationについて
ryonext
December 16, 2015
More Decks by ryonext
See All by ryonext
AWS Lambda の Ruby 対応
ryonext
0
280
TwitterのList編集しやすいやつ作った
ryonext
0
1.8k
AWS Lambda と API GatewayでRails使わずに済んだ話
ryonext
8
4.4k
capistrano-bundle_rsync使ったらオートスケールが高速化した話
ryonext
8
2.6k
PumaとUnicornで最近自分が理解したこと
ryonext
13
9.6k
Hubot事例
ryonext
1
1.7k
Redisでバッチ処理を冗長化しつつ排他制御
ryonext
0
2.2k
CircleCIとwercker
ryonext
3
1.3k
rubykaigi 3day interactive white board
ryonext
2
410
Other Decks in Programming
See All in Programming
No More NoSuchMethodError
exoego
1
110
エージェントを使い続けるためのメタワーク / Meta-work for keeping using the agent
rkaga
6
1.5k
GemmaをJevのように使ってみる / Use Gemma like Jev
kishida
5
820
Kotlinize Is Not Just Converting to Kotlin
chigichan24
1
180
Rでドレミ/Do-Re-Mi_with_R
florets1
0
130
Findy - エンジニア向け会社紹介/Findy Company Deck
findyinc
6
400k
Event is what happens
moro
2
1.2k
Apple Intelligence を用いた個人情報誤送信防止、及びユーザーリクエスト体験の改善について
yukiny
0
360
Lambda durable functionsでHuman in the Loopを楽に…楽に……
har1101
1
170
AI-Powered Domain-Driven Design
ziobrando
0
220
[JA] Domain Modeling with Vanilla Rails: 「操作」から再考するRailsの設計論
yasaichi
4
740
dotNET_vulnclicker_intro.pdf
deka_morita
0
150
Featured
See All Featured
The Curse of the Amulet
leimatthew05
3
16k
Being A Developer After 40
akosma
PRO
92
590k
What does AI have to do with Human Rights?
axbom
PRO
1
2.5k
How GitHub (no longer) Works
holman
316
150k
The SEO Collaboration Effect
kristinabergwall1
1
600
Dominate Local Search Results - an insider guide to GBP, reviews, and Local SEO
greggifford
PRO
0
370
Fashionably flexible responsive web design (full day workshop)
malarkey
409
67k
The Cost Of JavaScript in 2023
addyosmani
55
10k
We Analyzed 250 Million AI Search Results: Here's What I Found
joshbly
2
2k
Raft: Consensus for Rubyists
vanstee
142
7.8k
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
9
1.6k
A Soul's Torment
seathinner
8
3.8k
Transcript
WBMJEBUJPOʹ͍ͭͯ
ࣗݾհ w גࣜձࣾϢχίϯ w 5XJUUFS!SZPOFYU w ήʔϚʔ w ΜΜͱ͔εϓϥτΡʔϯͱ͔ w
;ͩΜ3BJMTͬͯ·͢
࠷ۙͷਐḿͰ͢ w ࠓճΏͬͨΓͬͯΔͷͰ·ͩ)3Ͱ͢ w ΤϯδχΞϞϯϋϯ4MBDL্ཱͪ͛ͯΔͷͰڵຯ͋Δํ͓ ͕͚͍ͩ͘͞
ษڧձʗίϛϡχςΟ w 4IJCVZBSC w :PLPIBNBSC w ,BXBTBLJSC w ͋ͨΓʹࢀՃͯ͠·͢ɻ
ձࣾͰ͍ͬͯΔ͜ͱ ւ֎͚ήʔϜΩϡʔϨγϣϯαʔϏεͷ 3PDL6.FEJBDSBGU IUUQTNFEJBDSBGUSPDLVBQQTDPN ւ֎͚ήʔϜϑΥʔϥϜͷ 3PDL65BML IUUQTUBMLSPDLVBQQTDPN ͷ։ൃΛ͍ͬͯ·͢ɻ
ࠓ͢͜ͱ w γεςϜͷͨΊͷWBMJEBUJPOʹ͍ͭͯ w 3BJMTͰWBMJEBUJPO͢Δ w %#Ͱ੍Λ͔͚Δ w 69ͷͨΊͷWBMJEBUJPOʹ͍ͭͯ w
+4ͰWBMJEBUJPO͢Δ
ίʔυʹ͍ͭͯ w ίʔυීஈࢲ͕ۀͰ͍ͬͯΔ3BJMTͰͷ࣮ ྫʹͳΓ·͕͢ɺ8FCϑϨʔϜϫʔΫશൠʹ ͍ͭͯಉ͜͡ͱ͕ݴ͑ΔΜ͡Όͳ͍͔ͳ͊ͱࢥ ͍·͢
WBMJEBUJPO͠·͠ΐ͏
Ϣʔβ໊ͷཁ݅͜ΕͰ w ͞จࣈ·Ͱ w ඞਢ
3BJMTͩͱ class User < ActiveRecord::Base validates :name, length: { maximum:
20 }, presence: true end
͜͏ͳΔ
؆୯ʂ
ͱ͜Ζ͕
3BJMTͷWBMJEBUJPOΞϓϦϨΠϠʔͰ ݕূՄೳͳϝιουͷ߹ʹͷΈ ݕূ͢Δ͚ͩͳͷͰ
Ϩίʔυʹ*OTFSU w */4&35JOUPVTFSTTFUOBNF B@OBNF@UIBU@JT@PWFS@UIBO@@DIBSBDUFST
WBMJEBUJPO͕Βͳ͍ϝιου Λ͏ VTFSVQEBUF@DPMVNO OBNF MPOH@OBNF@UIBU@PWFS@UIBO@UXFOUZ@DIBSBDUFST VTFSTBWF WBMJEBUFGBMTF
ͷΑ͏ͳૢ࡞Ͱɺ؆୯ʹ WBMJEBUJPOҧͷσʔλ͕࡞ΕΔ
ͦͯ͜͠ΕΛը໘͔Β ૢ࡞͠Α͏ͱ͢Δͱ w ࠓճͷૢ࡞Ͱ໊લΛมߋ͍ͯ͠ͳ͍ʹ͔͔Θ Βͣɺ໊લͰΤϥʔʹͳΔ มߋͨ͠ͷ͜͜
͞Βʹ
ύεϫʔυมߋը໘ w ଞͷઃఆը໘ͱΓग़ͯ͠ɺύεϫʔυ͚ͩ Λมߋ͢Δը໘ͱ͍͏ͭ͘ΓΑ͋͘Δͱࢥ͍ ·͢
ύεϫʔυΛมߋ͢Δը໘ͳͷʹɺ ໊લ͕ͯ͘ΤϥʔͱݴΘΕΔ w ͪΖΜɺ͜ͷը໘Ͱ໊લΛม͑Δ͜ͱͰ͖ͳ͍ w ϢʔβͲ͏͠Α͏ͳ͍
͕ͨͬͯ͠ w 8FCΞϓϦϨΠϠʔͰͷ੍͚ͩͰͳ͘ɺ͖ͬ ͪΓͱ%#Ͱͷ੍ΛೖΕ·͠ΐ͏
class CreateUsers < ActiveRecord::Migration def change create_table :users do |t|
t.string :name, limit: 20, null: false t.string :password t.timestamps null: false end end end %#ʹMJNJUͱOPUOVMM੍Λֻ͚ Δʢ3BJMTͷNJHSBUJPOͰΔྫʣ
Μɺ͡Ό͋%#ͷ੍͚ͩష͓͚ͬͯɺ 3BJMTͷWBMJEBUJPOཁΒͳ͍Μ͡ΌͶʁ
ͱ͍͏Θ͚ͰͬͯΈΔͱ
WBMJEBUJPOΤϥʔ͕ฦ͍ͬͯͨ ՕॴͰΤϥʔʹ
͡Ό͋͜ͷ%#ͷΤϥʔΛྫ֎DBUDIͯ͠ɺ దͳΤϥʔϝοηʔδΛฦ͢Α͏ʹ ͯ͠Εɾɾɾ
ͦΕɺ3BJMTͷWBMJEBUJPOͷ ํָ͕͡ΌͶ
ͱ͍͏Θ͚Ͱ w %#ͷ੍γεςϜΛकΔͨΊʹઈରʹֻ͚· ͠ΐ͏ɻ͕͜͜ΞϓϦϨΠϠʔͰͷWBMJEBUJPOΑ ΓΏΔ͍ͱ͍͏͜ͱ͕͍͚͋ͬͯͳ͍ɻ w ΞϓϦϨΠϠʔͰɺແବͳΫΤϦൃߦΛ͠ͳ ͍ʗΤϥʔॲཧΛదʹ͢ΔͨΊʹWBMJEBUJPOΛ Δ͜ͱΛڧ͘ਪ͠·͢ɻ
ΊͰͨ͠ΊͰͨ͠
Ͱͳ͍ʂ
͜͜·Ͱ w γεςϜͷͨΊͷWBMJEBUJPOͷ
͔͜͜Β w 69ͷͨΊͷWBMJEBUJPOͷ
69ͷͨΊͷWBMJEBUJPOͱʁ w Α͋͘ΔϢʔβొϑΥʔϜ
Ϣʔβ*%ΛೖΕͯΈΔ w ొϘλϯΛԡ͢ͱ͢ͰʹΘΕ͍ͯ·͢ɺͱΤ ϥʔ͕ฦͬͯ͘Δ
ผͷ*%Λࢼ͢ w ·ౖͨΒΕΔ
͞Βʹผͷ*%Λࢼ͢ w ·ͨ·ͨΤϥʔʹͳΔ
Ϣʔβʔౖͬͯ ͯ͠͠·͏
Ͳ͏͢Ε͍͍ͷ͔ʁ w ೖྗ͢ΔϘλϯԡ͢Τϥʔ͕ฦͬͯ͘ Δɺͱ͍͏Ұ࿈ͷྲྀΕΛ܁Γฦ͢ͷۤ௧ w ೖྗͨ࣌͠Ͱɺͦͷೖྗ͕ड͚ೖΕՄೳ͔Ͳ ͏͔ΛΘ͔ΔΑ͏ʹ͢Δ͖
Ϣʔβ͕ೖྗΛऴ͑ͨλΠϛϯάͰϑΟʔυόοΫ μϝͳ߹ͦͦԡͤͳ͘͢Δ
ޭ͢Δ߹ڭ͑ͯ͋͛Δ
w %#Ͱ͙ͷγεςϜͷͨΊͷWBMJEBUJPO w Ϣʔβʹշదʹೖྗͯ͠Β͏ͨΊͷɺ69ͷͨ ΊͷWBMJEBUJPO͕ඞཁ
Ͳ͏࣮ݱ͢Δ͔ʁ w ઌఔͷྫɺ%#ͰͷॏෳνΣοΫ͕ඞཁͳͷ Ͱ+BWBTDSJQU "1*ͷ࿈ܞ͕ඞཁͳέʔεɻ ͪΐͬͱ͍͜͠ͷͰ͋ͱͰɻ w ·ͣɺ'PSN͚ͩͰஅͰ͖Δɺʮඞਢೖྗʯ ʮ੍͞ݶʯʮϑΥʔϚοτνΣοΫʯʹ͍ͭ ͯ͠·͢ɻ
'PSNͰஅ͢ΔWBMJEBUJPO w ྫ͑ɺ)5.-ʹSFRVJSFEଐੑFNBJMଐੑ ͳͲ͕͋Δ w ೖྗඞਢ߲ʹೖྗ͍ͯ͠ͳ͔ͬͨΓɺࢦఆͷ ϑΥʔϚοτʹͳ͍ͬͯͳ͔ͬͨΒϒϥβϨ ϕϧͰΤϥʔΛฦͯ͘͠ΕΔ w ·͋ศར
<input placeholder="Username" required type="text" name="account[username]" id="account_username" />
ͱ͜Ζ͕ w ಈ͔ͳ͍ϒϥβ͕
w ͋Δ͚Ͳɺͦ͏͍͏ϨϕϧͷͰͳ͘ w *&ࢮΜͩʂ͏͍ͳ͍ʂ ͋
4BGBSJ w ಈ͔ͳ͍ w ࠷৽ͷ.BD04 J04Ͱಈ͔ͳ͍ w ͜ΕͰಈ͔ͳ͍Ҏ্ɺීٴΛߟ͑ΔͱཔΕͳ ͍ͱߟ͑Δ͖
+BWBTDSJQUͰΔ w K2VFSZͳΒ͍͔ͭ͘ϓϥάΠϯ͕͋Δ w 7VF 3FBDU "OHVMBSͷϑϨʔϜϫʔΫΛ༻ ͍ͯ͠ΔͳΒɺͦ͜Ͱͷྲّྀʹै͏ͱָ࣮͕ ͳͣ
௨৴͕ඞཁͳͭɺ ೖྗͷλΠϛϯάͰ௨৴ͯ݁͠ՌΛग़ͯ͠Δ
͜͏͍͏Πϝʔδ 'PSN Ϣʔβ +BWBTDSJQU "1* %# ೖྗ มߋΛݕ ೖྗ༰ΛૹΔ %#ʹ͍߹Θͤ
0,/( 0,/( 0,ʗ/(
+4͔ΒݺͿ ʢલεϥΠυ ͷεςοϓ 4 $ -> 5 $("#username").keyup(-> 6
$.get( 7 "/accounts/exists", 8 { username: $('#username').val() }, 9 (data) -> 10 if data.result 11 $("#account-result").html("<div class='glyphicon glyphicon-remove text-danger'>͜ͷϢʔβ໊ΘΕ͍ͯ·͢</div>") 12 $("#submit-button").prop("disabled", true) 13 else 14 $("#account-result").html("<div class='glyphicon glyphicon-ok text-success'>͜ͷϢʔβ໊༻ՄೳͰ͢</div>") 15 $("#submit-button").prop("disabled", false) 16 ) 17 ) 18 w $P⒎FF4DSJQUͰ͢ w ࣮ࡍʹLFZVQͰΔͱ௨৴සଟ͗͢ΔͷͰEFCPVDF͢ΔQMVHJOͳͲ͍·͠ΐ͏ w ྫK2VFSZͰ͕͢ɺԿΒ͔ͷϑϨʔϜϫʔΫΛ͏ͷΦεεϝͰ͢
֬ೝ༻"1*࡞Δ ʢdͷεςοϓ Rails.application.routes.draw do resources :accounts do collection do get
"exists", to: "accounts#exist" end end end class AccountsController < ApplicationController def exist if Account.exists?(username: params[:username]) render json: { result: true }.to_json else render json: { result: false }.to_json end end end
͜͜Ͱ w +4ͷWBMJEBUJPO͚͓͚ͩͬͯɺ%#ͷ੍ཁ Βͳ͍Μ͡Όͳ͍ʁ
Μͳͨ͜ʔͳ͍ w +4ඇରԠϒϥβʗΦϑʹ͢Δʗ1045 ͷ63-Λୟ͘ɺճආ༨༟
w +4ͱ%#͚͓͚ͩͬͯ3BJMTͷ͍ͭΒͳ ͍Μ͡Όͳ͍ʁ
͋·ΓΑ͘ͳ͍ w +4ճආ͢ΔΑ͏ͳΞΫηεʹରͯ͠ɺ3BJMTͰద ͳWBMJEBUJPOͰΤϥʔϝοηʔδΛฦͯ͠Δ ඞཁͳ͍·͋Θ͔Δ w %#ʹରͯ͠ແବͳ௨৴ʗΫΤϦ͕ൃߦ͞ΕΔՄ ೳੑ͕͋ΔΑ͘ͳ͍
͞Βʹ w "1*Խ͢ΔͷͰ͋Εɺ3BJMTͷNPEFMʹΑΔ WBMJEBUJPO͕͙ՕॴͱͳΔ w େͨ͠खؒͰͳ͍ͷͰɺNPEFMͰͷWBMJEBUJPO ͓ͬͯ͘΄͏͕ྑ͍ɻ
8FCΞϓϦͰͳ͘εϚϗͷ ߹ʁ w "1*αʔόཱͯͯɺεϚϗ͔Β"1*Λୟͭ͘
69ͷͨΊͷWBMJEBUJPO ΫϥΠΞϯτଆͰ w +4ͷ࣌ͱಉ͡Α͏ʹɺۃྗແବͳ௨৴Λൃੜ͞ ͤͣʹɺϢʔβͷೖྗʹରͯ͠ૉૣ͘ϑΟʔυόο ΫΛฦ͢
αʔόଆ w %#ଆݴ͏·Ͱͳ͘ඞཁ w ΫϥΠΞϯτ͕όά͍ͬͯΔՄೳੑ͋ΔͷͰɺ 8FCΞϓϦͷNPEFMͰͷWBMJEBUJPOඞཁɻ
·ͱΊ w ࠷ޙඌ %# Ͱෆਖ਼ͳઈରޚ͢Δγες ϜͷͨΊͷWBMJEBUJPO w ࠷લྻ +4 ΫϥΠΞϯτΞϓϦ
Ͱਖ਼ৗೖྗͷͨ ΊͷಋઢΛ࡞ͬͯ͋͛Δ69ͷͨΊͷ WBMJEBUJPO
͝੩ௌ͋Γ͕ͱ͏ ͍͟͝·ͨ͠