Upload
daisuke-ishii
View
6.207
Download
0
Embed Size (px)
Citation preview
バカでもわかるRails #02Model/Controller/Routes/認証 編
石井大輔 - www.jenio.co Twitter@ishiid, email: [email protected]
1
馬鹿
パパ、Ruby on Rails教えて!
2
題名はクレージーですが、真面目な教材です
Rubyは英語みたいでとっつきやすいのに、Railsはとても難しい。
これが初心者の僕の悩みでした。もっと簡単な学習方法はないものか。
原因はRails用語が実生活で全く使わない抽象概念だからではないでしょうか。
だったらまず用語の意味を繰り返し覚えるべきでは?
英語の勉強と同じ手法を取れば良いのでは?これが僕の仮説です。
Q&A形式でクイズっぽい単語帳カードを作りましたので、
自習もしくは相方と使ってみて下さい。
コーディングを楽しみましょう! 3
単語帳の様に繰り返し学びましょう!
4
注意
この教材は一通りRailsを勉強したが、記憶が定着していない人を対象としています。
全くの初心者の方は、まずRubyとRailsを勉強し、補助教材として使ってください。
説明を意図的にシンプルかつ抽象的にまとめてありますので、細かい点気になる人はググりましょう。
5
コンセプトについて勉強しよう!
6
“tweets”という名前のデータベースがあると仮定しましょう。エクセルシートに形が似ています。
id tweet user
1 私は元気です。 ヒロシ
2 結婚しました! マリ
3 転職決まりました。 ケンジ
7*データベース名は常に小文字で始まり複数形です“tweets”.
問: RailsでいうModelって簡単に言うと何?
8
問: RailsでいうModelって簡単に言うと何?
9
答: Railsのアプリがどの様に
データベースと連絡を取るか、と
いう仕組み
問: Modelのファイルの基本には何が書いてある?
10
問: Modelのファイルの基本には何が書いてある?
11
答: app/models/tweet.rbの場合
Class Tweet < ActiveRecord::Base
end
*Tweetはクラスの名前なので大文字
*TweetはActiveRecordを継承
問: ActiveRecordって簡単に言うと何?
12
問: ActiveRecordって簡単に言うと何?
13
答: Modelそのもの。データベースと論理を
コントロールする仕組み。
認証の仕組みを勉強しよう!
14
問: データの存在を認証するModelのコードを書いて
15
問: データの存在を認証するModelのコードを書いて
16
答: app/models/tweet.rb
Class Tweet < ActiveRecord::Base
validates_presence_of :status
end
問: 前ページのModelに対して空のデータを作って認証してみて
17
問: 前ページのModelに対して空のデータを作って認証してみて
18
答: t = Tweet.new
=> #< Tweet id:nil, text:nil, user:nil>
t.save => false
*nil = データなしという意味
*false = 認証が取れず保存できなかった
問: 前ページの空データに対してエラーメッセージを表示させて
19
問: 前ページの空データに対してエラーメッセージを表示させて
20
答: t.errors.messages => {status:[“空欄
は不可です”]}
もしくは
t.errors[:status][0] => “空欄は不可です”
問: 数値か小数点のみ有効かどうか認証するModelを書いてください
21
問: 数値か小数点のみ有効かどうか認証するModelを書いてください
22
答:class Tweet < ActiveRecord::Base
validates :tweet, numericality: true
end
問: 数値のみ認証するModelを書いてください
23
問: 数値のみ認証するModelを書いてください
24
答:class Tweet < ActiveRecord::Base
validates :tweet, numericality: {only_integer: true }
end
Controllerを勉強しよう!
25
問: JSONとは何の事ですか?具体例交え。
26
問: JSONとは何の事ですか?具体例交え。
27
答:JavaScriptの中でデータを表現する為の
文法
{"employees":[{"firstName":"John","lastName":"Doe"},
{"firstName":"Anna", "lastName":"Smith"},
{"firstName":"Peter", "lastName":"Jones"}]}
問: XMLとは何の事ですか?具体例交え。
28
問: XMLとは何の事ですか?具体例交え。
29
答:タグを使ったデータの表現形式 <employees><employee>
<firstName>John</firstName> <lastName>Doe</lastName>
</employee><employee>
<firstName>Anna</firstName> <lastName>Smith</lastName>
</employee><employee>
<firstName>Peter</firstName> <lastName>Jones</lastName>
</employee></employees>
問: 「travels」コントローラの「show」アクションを呼び出す時にパ
ラメータ名「id=10」の値をリクエストに含める場合のURLは?
30
問: 「travels」コントローラの「show」アクションを呼び出す時にパ
ラメータ名「id=10」の値をリクエストに含める場合のURLは?
31
答:http://localhost:3000/travels/show/10
問: 前ページの場合のルーティングは?
32
問: 前ページの場合のルーティングは?
33
答:match ‘travels/show/:id’ => ‘travels#show’
問: params[:パラーメータ名]の意味は?
34
問: params[:パラーメータ名]の意味は?
35
答:アクションメソッドの中で、パラメータ名を指
定して値を取得する
問: 今回のセッションのユーザーIDが、そのツイートのユーザーIDと一致していない、というコード
36
問: 今回のセッションのユーザーIDが、そのツイートのユーザーIDと一致していない、というコード
37
答:session[:user_id] != @tweet.user_id
問: 登録ありがとうございます、とフラッシュメッセージを出すコード
38
問: 登録ありがとうございます、とフラッシュメッセージを出すコード
39
答:flash[:notice] = “登録ありがとうございま
す”
問: tweetを取得するget_tweetというメソッドを定義してください
40
問: tweetを取得するget_tweetというメソッドを定義してください
41
答: def get_tweet
@tweet = Tweet.find(params[:id])
end
問: get_tweetをedit, update, destroyの時に実行するというコードを書いてください
42
問: get_tweetをedit, update, destroyの時に実行するというコードを書いてください
43
答: app/controller/tweets_controller.rb
before_action :get_tweet, only: [:edit, :update, :destroy]
Routesを勉強しよう!
44
問: Twitterというアプリのroutes.rbの骨格を書いてください
45
問: Twitterというアプリのroutes.rbの骨格を書いてください
46
答: app/config/routes.rb
Twitter::Application.routes.draw do
end
問: 前ページの回答にresourcesを足してください
47
問: 前ページの回答にresourcesを足してください
48
答: app/config/routes.rb
Twitter::Application.routes.draw do
resources :tweets
end
*resourcesは常に小文字で複数形
問: 前ページの回答にnew actionを足してください
49
問: 前ページの回答にnew actionを足してください
50
答: app/config/routes.rb
Twitter::Application.routes.draw do
resources :tweets
get ‘/new_tweet’ => ‘tweets#new’
endpath controller action
GOAL! よくできました!良かったら繰り返しチャレンジしてみてください。
51
改善の為の、ご意見ご感想お待ちしています。
Twitter@ishiidhttps://twitter.com/ishiidEmail: [email protected]