railsチュートリアル2週目 学習メモ 1章〜3章
2018/06/17 02:20
<p>こんにちは、fujjimaです。</p> <p> </p> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/rails">rails</a><a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%C1%A5%E5%A1%BC%A5%C8%A5%EA%A5%A2%A5%EB">チュートリアル</a>が一通り終わったんですが、正直5,6章あたりから読み飛ばすところが増えてきて、いまいち理解しきれていなかったので、1章から一つ一つ理解しながら復習を行うことにしました。そこで、疑問に思っていたところや詰まっていたところを、参考にさせて頂いたサイトと合わせて、備忘録としてまとめてみました。</p> <p>※かなり雑にまとめているので、後々加筆修正が多分入ります。</p> <p> </p> <p> </p> <p><em><strong>1章</strong></em></p> <p> </p> <p><<a class="keyword" href="http://d.hatena.ne.jp/keyword/rails">rails</a>インストール></p> <p>■bundle,Gem周り</p> <p>・bundleとはなんぞや</p> <p>・GemfileとGemfile.lockって何が違うのか</p> <p> </p> <p>■pumaとは</p> <p> </p> <p>参考:</p> <p><a href="https://qiita.com/kompiro/items/223bb04c2f009787eea8">pumaを使ってみた</a></p> <p> </p> <p>■排他処理とは</p> <p> </p> <p>参考:</p> <p><a href="http://www.techscore.com/blog/2012/12/25/rubyrails%E3%81%A7%E3%83%AD%E3%83%83%E3%82%AF%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%81%AB%E3%82%88%E3%82%8B%E6%8E%92%E4%BB%96%E5%88%B6%E5%BE%A1/">» Ruby/Railsでロックファイルによる排他制御 TECHSCORE BLOG</a></p> <p> </p> <p>■<a class="keyword" href="http://d.hatena.ne.jp/keyword/webrick">webrick</a>とは?</p> <p>参考:</p> <p><a href="https://thinkit.co.jp/article/117/1">WEBrickを使ってみよう! | Think IT(シンクイット)</a></p> <p> </p> <p><controllerファイル></p> <p>■Action Controllerとは</p> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/rails">rails</a>における「<a class="keyword" href="http://d.hatena.ne.jp/keyword/MVC">MVC</a>」の概念の内、"C"に相当するライブラリの一つ。</p> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/rails">rails</a>のコントローラは基本的にこのAction Controllerクラスを継承している。</p> <p> </p> <p>参考:</p> <p><a href="https://railsguides.jp/action_controller_overview.html">Action Controller の概要 | Rails ガイド</a></p> <p><a href="http://d.hatena.ne.jp/keyword/ActionController">ActionControllerとは - はてなキーワード</a></p> <p> </p> <p>■Application Controllerとは</p> <p> </p> <p>参考:</p> <p><a href="https://whitech0c0late.hatenablog.com/entry/20120128/1327759552">Railsで共通メソッドの作り方 - 線路は続くよどこまでも。</a></p> <p> </p> <p>■コントローラとは</p> <p><span style="color: #222222; font-family: 'Hiragino Kaku Gothic Pro', 'ヒラギノ角ゴ Pro W4', メイリオ, Osaka, 'MS Pゴシック ', sans-serif; font-size: 16px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial; display: inline !important; float: none;">コントローラはユーザーからのリク<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%A8%A5%B9">エス</a>トを受け取り、モデルやビューなどと連携し結果をユーザーに返す役割をする部分。</span></p> <p> </p> <p>参考:</p> <p><a href="https://www.rubylife.jp/rails/controller/">コントローラとアクション - Ruby on Rails入門</a></p> <p> </p> <p>■renderとは</p> <p>テンプレート表示のためのメソッドであり、contoroller,view両方で使用することが出来る。(ただし、それぞれの場合で使用方法が若干異なる)</p> <p> </p> <p>参考:</p> <p><a href="http://railsdoc.com/references/render">render - リファレンス - - Railsドキュメント</a></p> <p><a href="https://www.sejuku.net/blog/14032">rails renderの基礎から使い方まで(partial, 引数) | 侍エンジニア塾ブログ | プログラミング入門者向け学習情報サイト</a></p> <p> </p> <p>■routes.rbファイルとは</p> <p>HTTPで送信されてきたリク<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%A8%A5%B9">エス</a>トを適切なコントローラのアクションに割り振る役割を持っている。5種類のアクションがある(get,post,delete,puch,post)</p> <p> </p> <p>参考:</p> <p><a href="https://www.sejuku.net/blog/13078">【完全入門】Ruby on Railsのroutesについてわかりやすく解説してみた! | 侍エンジニア塾ブログ | プログラミング入門者向け学習情報サイト</a></p> <p> </p> <p> </p> <p><em><strong>2章</strong></em></p> <p> </p> <p> ■リソース</p> <p style="box-sizing: inherit; margin: 0px; line-height: 1.9; color: #333333; font-family: -apple-system, system-ui, 'Segoe UI', 'Helvetica Neue', 'Hiragino Kaku Gothic ProN', メイリオ, meiryo, sans-serif; font-size: 16px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: #ffffff; text-decoration-style: initial; text-decoration-color: initial;">データモデルとweb<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%A4%A5%F3%A5%BF%A1%BC%A5%D5%A5%A7%A5%A4%A5%B9">インターフェイス</a>が組み合わさったもの。</p> <ul style="box-sizing: inherit; margin: 1.5em 0px; padding: 0px 0px 0px 1.5em; list-style: disc; line-height: 1.9; color: #333333; font-family: -apple-system, system-ui, 'Segoe UI', 'Helvetica Neue', 'Hiragino Kaku Gothic ProN', メイリオ, meiryo, sans-serif; font-size: 16px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: #ffffff; text-decoration-style: initial; text-decoration-color: initial;"> <li style="box-sizing: inherit;">データモデルとは 現実世界のあるモノを分類/抽象化して落とし込んだカタマリ (より具体的にいえば(今回の文脈では)「<a class="keyword" href="http://d.hatena.ne.jp/keyword/RDBMS">RDBMS</a>に則って設計されたデータ群」と同義)</li> <li style="box-sizing: inherit;"> <p style="box-sizing: inherit; margin: 1em 0px; line-height: 1.9;">web<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%A4%A5%F3%A5%BF%A1%BC%A5%D5%A5%A7%A5%A4%A5%B9">インターフェイス</a>とは<br style="box-sizing: inherit;" />データモデルをwebで取り扱えるようにしたもの</p> </li> </ul> <p>→つまりリソースとは、</p> <p> HTTP<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%D7%A5%ED%A5%C8%A5%B3%A5%EB">プロトコル</a>経由で自由にCURD(作成/読み出し/更新/削除)できる</p> <p>(分類された)データ群</p> <p> </p> <p>参考:</p> <p><a href="https://qiita.com/kidach1/items/43e53811c12351915278">Railsを支える基本概念の整理(RESTfulやリソースなど)</a></p> <p> </p> <p>■scaffold</p> <ul> <li>モデル、コントローラ、ビュー、ルーティングなどをまとめて作成し、雛形を作成してくれる</li> <li>作成したモデルに対して、各カラムの名前及びデータ型(int型とかString型とか)を指定できる</li> <li>各種webページを自動で作ってくれる(対応アクションはindex,show,new,edit)</li> </ul> <p> </p> <ul> <li>コマンドの書式は下記のような感じ</li> </ul> <pre style="box-sizing: border-box; overflow: auto; font-family: Menlo, Monaco, Consolas, 'Courier New', monospace; font-size: 15px; display: block; padding: 10px; margin: 0px 0px 15px 15px; line-height: 1.6; color: #555555; word-break: break-all; word-wrap: break-word; background: #eeeeee; border: 1px solid #cccccc; border-radius: 4px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;"><a class="keyword" href="http://d.hatena.ne.jp/keyword/rails">rails</a> generate scaffold モデル名 <a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%AB%A5%E9%A5%E0%CC%BE">カラム名</a>1:データ型1 <a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%AB%A5%E9%A5%E0%CC%BE">カラム名</a>2:データ型 2 …</pre> <p> </p> <ul> <li>自動的に作成されるコントローラファイルは下記のような感じ</li> </ul> <p>※長いので一部省略してます</p> <p> </p> <pre class="code lang-ruby" style="overflow: auto; font-family: Monaco, Consolas, 'Courier New', Courier, monospace, sans-serif; font-size: 15.2px; border: 1px solid #c7dce3; margin: 0px 0px 10px; padding: 20px; white-space: pre; color: #524336; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: #ffffff; text-decoration-style: initial; text-decoration-color: initial;" data-lang="ruby" data-unlink=""><span class="synPreProc" style="color: #9355e6;">class</span> <span class="synType" style="color: #3ec63e;">UsersController</span> < <span class="synType" style="color: #3ec63e;">ApplicationController</span> . def index . end <span class="synPreProc" style="color: #9355e6;">def</span> <span class="synIdentifier" style="color: #51cfcf;">show</span> . end <span class="synPreProc" style="color: #9355e6;">def</span> <span class="synIdentifier" style="color: #51cfcf;">new</span> . end <span class="synPreProc" style="color: #9355e6;">def</span> <span class="synIdentifier" style="color: #51cfcf;">edit</span> . end <span class="synPreProc" style="color: #9355e6;">def</span> <span class="synIdentifier" style="color: #51cfcf;">create</span> . end <span class="synPreProc" style="color: #9355e6;">def</span> <span class="synIdentifier" style="color: #51cfcf;">update</span> . end <span class="synPreProc" style="color: #9355e6;">def</span> <span class="synIdentifier" style="color: #51cfcf;">destroy</span> . end <span class="synPreProc" style="color: #9355e6;">end</span></pre> <p> </p> <p>※この時、モデル名はリソース名の単数形にする(例:リソース名=Users,モデル名=User)。これは、<a class="keyword" href="http://d.hatena.ne.jp/keyword/rails">rails</a>では、モデルが設計図という概念である(=設計図から作られたものでなく、あくまで設計図そのもの)と前提に置いており、概念は複数形には出来ないためである。一方、リソース名は上記の通り自由に<a class="keyword" href="http://d.hatena.ne.jp/keyword/CRUD">CRUD</a>できるデータ群なので、複数形となる。</p> <p> </p> <p>参考:</p> <p><a href="https://techacademy.jp/magazine/7204">超便利!Ruby on Railsのscaffoldの使い方 | TechAcademyマガジン</a></p> <p><a href="https://qiita.com/kidach1/items/43e53811c12351915278">Railsを支える基本概念の整理(RESTfulやリソースなど)</a></p> <p> </p> <p>↓なぜモデル名が単数なのかについての参考</p> <p><a href="https://github.com/yochiyochirb/meetups/issues/94">"rails generate scaffold modelname"でモデル名を単数にする理由について · Issue #94 · yochiyochirb/meetups · GitHub</a></p> <p> </p> <p>■ resources</p> <p>routes.rbファイルで使用され、自動でRESTFULなルート定義を設定する。</p> <p>"<a class="keyword" href="http://d.hatena.ne.jp/keyword/rails">rails</a> routes"コマンドでHTTPメソッド(Verb列)とURLとアクションが紐づいたルート定義が生成されていることを確認出来る。</p> <p>なお、HTTPメソッドはリソースに対して行われるものなので、対象のリソースを指定する。(resources :usersのように)</p> <p>参考:</p> <p><a href="https://www.sejuku.net/blog/27728#i-3">【Rails入門】resourcesの使い方まとめ | 侍エンジニア塾ブログ | プログラミング入門者向け学習情報サイト</a></p> <p><a href="https://railsguides.jp/routing.html">Rails のルーティング | Rails ガイド</a></p> <p> </p> <p>■<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%A4%A5%F3%A5%B9%A5%BF%A5%F3%A5%B9">インスタンス</a>変数(@が付く変数)</p> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%A4%A5%F3%A5%B9%A5%BF%A5%F3%A5%B9">インスタンス</a>ごとに値を持つ変数。</p> <p> </p> <p>参考:</p> <p><a href="https://techacademy.jp/magazine/9704">変数の種類を知っておこう!Ruby変数のスコープの使い方 | TechAcademyマガジン</a></p> <p><a href="http://uxmilk.jp/24330">【Ruby入門】Rubyのインスタンス変数とクラス変数 | UX MILK</a></p> <p> </p> <p> </p> <p>↓<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%A4%A5%F3%A5%B9%A5%BF%A5%F3%A5%B9">インスタンス</a>、クラスの概要をざっくりと分かりやすく解説してくれています</p> <p><a href="http://d.hatena.ne.jp/micdonalds/20100305/1267738291">クラスメソッドとインスタンスメソッド - mic_footprints</a></p> <p> </p> <p><a href="https://diveintocode.jp/tips/what_class_instance">DIVE INTO CODE | クラスとインスタンスとは</a></p> <p> </p> <p>■validates</p> <p>バリデーションは、正しいデータのみをデータベースに保存するために行われる。</p> <p>例えば下記のような部分がバリデーションである。</p> <p> </p> <pre class="code lang-ruby" style="overflow: auto; font-family: Monaco, Consolas, 'Courier New', Courier, monospace, sans-serif; font-size: 15.2px; border: 1px solid #c7dce3; margin: 0px 0px 10px; padding: 20px; white-space: pre; color: #524336; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: #ffffff; text-decoration-style: initial; text-decoration-color: initial;" data-lang="ruby" data-unlink=""><span class="synPreProc" style="color: #9355e6;">class</span> <span class="synType" style="color: #3ec63e;">Micropost</span> < <span class="synType" style="color: #3ec63e;">ApplicationRecord</span> validates <span class="synConstant" style="color: #ff6666;">:content</span>, <span class="synConstant" style="color: #ff6666;">length</span>: {<span class="synConstant" style="color: #ff6666;">maximum</span>: <span class="synConstant" style="color: #ff6666;">140</span>} <span class="synPreProc" style="color: #9355e6;">end</span></pre> <p> </p> <p>validatesで文字列の長さを検証する時の使い方は以下のようになる。</p> <pre style="box-sizing: border-box; overflow: auto; font-family: Menlo, Monaco, Consolas, 'Courier New', monospace; font-size: 13px; display: block; padding: 9.5px; margin: 0px 0px 10px; line-height: 1.42857; color: #333333; word-break: break-all; word-wrap: break-word; background-color: #f5f5f5; border: 1px solid #cccccc; border-radius: 4px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;"><code style="box-sizing: border-box; font-family: Menlo, Monaco, Consolas, 'Courier New', monospace; font-size: inherit; padding: 0px; color: inherit; background-color: transparent; border-radius: 0px; white-space: pre-wrap;">validates(<span style="color: #00cccc;">検証するフィールド名</span>, <span style="color: #ff0000;">:length => 検証パラメータ</span>)</code></pre> <p> </p> <p>今回で言うと、下記のようにvalidatesを使用していることが分かる。</p> <p><span style="color: #00cccc;">検証するフィールド名</span> = :content(シンボル)</p> <p><span style="color: #ff0000;">:length => 検証パラメータ</span> = length: 検証パラメータ(ハッシュ構造のデータ型の代入)</p> <p> </p> <p>※ここで、":content"と" maximum: " にそれぞれ付いてる" : "の位置の違いがとても気になったので、■ハッシュとシンボルに別枠としてまとめた。</p> <p> </p> <p>参考:</p> <p><a href="https://qiita.com/shunhikita/items/772b81a1cc066e67930e">Railsバリデーションまとめ</a></p> <p><a href="https://railsguides.jp/active_record_validations.html">Active Record バリデーション | Rails ガイド</a></p> <p><a href="http://railsdoc.com/references/validates">validates - リファレンス - - Railsドキュメント</a></p> <p> </p> <p> </p> <p>■ハッシュとシンボル</p> <p>【シンボル】</p> <p>文字列に見えるが内部は数値。Symbolクラスのオブジェクトであり、同じ表記のシンボルなら、必ず同じ<strong><em>オブジェクト※</em></strong>を指す。</p> <p>本当にざっくり言うと、":content"のように文字列の前に":"が付いていたらシンボル。</p> <p>ただし、代入の際は":"は文字列の後ろに来る。下のようなパターンはまさにそれ。</p> <p> </p> <pre class="code lang-ruby" style="overflow: auto; font-family: Monaco, Consolas, 'Courier New', Courier, monospace, sans-serif; font-size: 15.2px; border: 1px solid #c7dce3; margin: 0px 0px 10px; padding: 20px; white-space: pre; color: #524336; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: #ffffff; text-decoration-style: initial; text-decoration-color: initial;" data-lang="ruby" data-unlink="">fruites = {<span class="synConstant" style="color: #ff6666;">apple</span>: red, <span class="synConstant" style="color: #ff6666;">grape</span>: purple} <span class="synComment" style="color: #4f80e5;">#ここで代入</span> puts fruites[<span class="synConstant" style="color: #ff6666;">:apple</span>] <span class="synComment" style="color: #4f80e5;">#redと表示</span> puts fruites[<span class="synConstant" style="color: #ff6666;">:grape</span>] <span class="synComment" style="color: #4f80e5;">#purpleと表示</span></pre> <p> </p> <p>※ここで、「オブジェクトとは?」と思った人は下の「参考:」内にあるリンク先をみて下さい。</p> <p> </p> <p>【ハッシュ】</p> <p>キーと値を組み合わせて保持するデータ構造。配列が開始番号をゼロとした要素番号でしか要素の指定が出来ないのに対して、「○○なら××」というようにキーに対する値と言う形で値を管理できる。まぎらわしいが、下のようにシンボルを使ってハッシュを作ることも出来る。</p> <pre class="code lang-ruby" style="overflow: auto; font-family: Monaco, Consolas, 'Courier New', Courier, monospace, sans-serif; font-size: 15.2px; border: 1px solid #c7dce3; margin: 0px 0px 10px; padding: 20px; white-space: pre; color: #524336; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: #ffffff; text-decoration-style: initial; text-decoration-color: initial;" data-lang="ruby" data-unlink="">user = {<span class="synConstant" style="color: #ff6666;">:user1</span> => <span class="synSpecial" style="color: #c000c0;">"</span><span class="synConstant" style="color: #ff6666;">ユーザー1</span><span class="synSpecial" style="color: #c000c0;">"</span>, <span class="synConstant" style="color: #ff6666;">:user2</span> => <span class="synSpecial" style="color: #c000c0;">"</span><span class="synConstant" style="color: #ff6666;">ユーザー2</span><span class="synSpecial" style="color: #c000c0;">"</span>} <span class="synComment" style="color: #4f80e5;">#ここでシンボルに代入している</span> puts user <span class="synComment" style="color: #4f80e5;">#表示は右の通り {:user1=>"ユーザー1", :user2=>"ユーザー2"}</span></pre> <p> </p> <p>参考:</p> <p>↓シンボル</p> <p><a href="https://qiita.com/iron-breaker/items/32710004f0bb2e2babb6">配列とハッシュとシンボルは紛らわしいので整理!!</a></p> <p><a href="http://mikanmarusan.hatenablog.com/entry/2017/12/29/005632">[Ruby] シンボルとハッシュ - mikanmarusanのブログ</a></p> <p> </p> <p>↓ハッシュ</p> <p><a href="https://style.potepan.com/articles/4832.html">【Ruby入門】ハッシュ(hash)とシンボルの基本 | 「ポテパンスタイル」</a></p> <p> </p> <p>↓シンボルの詳細な理解に関しては以下を参考にして下さい</p> <p><a href="http://ruby-newbie.hatenablog.com/entry/2012/12/30/201905">Ruby on Rails 入門のための知識 1(シンボルとハッシュ) - OnsenとRuby</a></p> <p> </p> <p>↓シンボルのちょっと難しいやつ</p> <p><a href="https://rails-study.net/symbol/">Railsでよく出てくるコロン(:)は、シンボルって言うやつらしい | JavaからのRuby on Rails入門</a></p> <p> </p> <p>↓オブジェクトについて</p> <p><a href="https://qiita.com/kansiho/items/13b5e9a32ddfc9bea01c">rubyにおけるオブジェクト指向とはなにか(๑•̀ㅂ•́)و✧【基礎】</a></p> <p> </p> <p> ■has_many,belongs_toの関連付け</p> <p>そもそも関連付けとは、テーブル同士に関係があることを示すためのもの。</p> <p>belongs_toとhas_manyの二つがあるが、それぞれ下記のような使用法となる。</p> <p> </p> <p>・belongs_to:</p> <p> <a class="keyword" href="http://d.hatena.ne.jp/keyword/%BB%B2%BE%C8%B8%B5">参照元</a>テーブルから参照先のテーブルのデータの情報にアクセスすることが出来る</p> <p> ようにする→<a class="keyword" href="http://d.hatena.ne.jp/keyword/%BB%B2%BE%C8%B8%B5">参照元</a>と参照先の関係を明示する</p> <p>・has_many:</p> <p> 1:n (nは任意の整数) の関係を表す。例えば一つのオブジェクトに対して、</p> <p> 複数のオブジェクトが存在していることを明示できる。</p> <p>※has_many関連付けを使用する場合、相手のモデル名は複数形にする必要がある</p> <p> </p> <p>参考:</p> <p>↓関連付けの基本 </p> <p><a href="https://www.sejuku.net/blog/26617">【Rails入門】has_many、belongs_toの使い方まとめ | 侍エンジニア塾ブログ | プログラミング入門者向け学習情報サイト</a></p> <p><a href="https://qiita.com/To_BB/items/47d2c7b1bc3513025d7b">【Rails初心者向け】モデル間の関連付け(アソシエーション)まとめ</a></p> <p> </p> <p> </p> <p>■継承</p> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/ruby">ruby</a>の継承では、「親クラス」のメソッド、カラムを使用することが出来るようになるため、コードの量を減らすことが出来る。</p> <p> </p> <p>参考:</p> <p><a href="https://techacademy.jp/magazine/9722">実際の業務で役立つ!Rubyでクラスを継承する方法 | TechAcademyマガジン</a></p> <p> </p> <p>↓継承とかオーバーライドとか</p> <p><a href="https://rails-study.net/extend/">Rubyの継承とオーバーライドについてまとめてみた | JavaからのRuby on Rails入門</a></p> <p> </p> <p> </p> <p>ざっと2章はここまで!</p> <p> </p> <p> </p> <p><em><strong>3章</strong></em></p> <p> </p> <p> ■README.md</p> <p> </p> <p>参考:</p> <p> </p> <p> </p> <p>■heroku,<a class="keyword" href="http://d.hatena.ne.jp/keyword/github">github</a>コマンド</p> <p> </p> <p>ここだけは注意!!/////////////////////////////////////////////////////////////////////////////////</p> <p>今後Herokuで何らかの本番アプリケーションを運用する予定があるなら、7.5のproduction用Webサーバーの設定に必ず従ってください。</p> <p>////////////////////////////////////////////////////////////////////////////////////////////////////////////</p> <p>参考:</p> <p> </p> <p>↓herokuにデプロイしたアプリを消す時</p> <p><a href="https://qiita.com/chihiro/items/5c3ff400f6cb99deb945">【herokuコマンド】createからdestroyまで</a></p> <p> </p> <p> ■<a class="keyword" href="http://d.hatena.ne.jp/keyword/rails">rails</a> g controller 〜 コマンドについて</p> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/rails">rails</a> generateコマンドの一種である。ファイルの自動生成コマンドであり、"generate"部分を"g"に省略可能である。どういったファイルが生成されるのか、については「参考:」にあるリンク先のサイト様を参照して下さい。とてもきれいにまとまっています。</p> <p> </p> <p>今回で言うと、"<a class="keyword" href="http://d.hatena.ne.jp/keyword/rails">rails</a> g controller〜"だと以下のファイルが生成されるそうです。</p> <p>・コントローラ</p> <p>・ビュー</p> <p>・アセット(参考: にアセットについてのリンク先を載っけています)</p> <p>・ルート</p> <p>・テスト</p> <p>・ヘルパー</p> <p> </p> <p>ちなみに、下にコマンドの実行結果を載せました。</p> <p> </p> <pre class="code lang-ruby" style="overflow: auto; font-family: Monaco, Consolas, 'Courier New', Courier, monospace, sans-serif; font-size: 15.2px; border: 1px solid #c7dce3; margin: 0px 0px 10px; padding: 20px; white-space: pre; color: #524336; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: #ffffff; text-decoration-style: initial; text-decoration-color: initial;" data-lang="ruby" data-unlink=""> create app/controllers/static_pages_controller.rb route get <span class="synSpecial" style="color: #c000c0;">'</span><span class="synConstant" style="color: #ff6666;">static_pages/help</span><span class="synSpecial" style="color: #c000c0;">'</span> route get <span class="synSpecial" style="color: #c000c0;">'</span><span class="synConstant" style="color: #ff6666;">static_pages/home</span><span class="synSpecial" style="color: #c000c0;">'</span> invoke erb create app/views/static_pages create app/views/static_pages/home.html.erb create app/views/static_pages/help.html.erb invoke test_unit create test/controllers/static_pages_controller_test.rb invoke helper create app/helpers/static_pages_helper.rb invoke test_unit invoke assets invoke coffee create app/assets/javascripts/static_pages.coffee invoke scss create app/assets/stylesheets/static_pages.scss</pre> <p> </p> <p>参考:</p> <p><a href="http://maeharin.hatenablog.com/entry/20130212/rails_generate">いつも忘れる「Railsのgenerateコマンド」の備忘録 - maeharinの日記</a></p> <p> </p> <p> ↓アセット</p> <p><a href="https://qiita.com/shizuma/items/1980bf885906c73238b6">Rails Assetの管理についてまとめる</a></p> <p> </p> <p>■<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%DE%A5%C3%A5%D4%A5%F3%A5%B0">マッピング</a>(routes.rbファイル)</p> <p>1章でも出てきたroutes.rbファイルについて、中身の詳細な書き方を調べました。</p> <p> </p> <p>※ちなみに下記の①、②の書き方では同じ結果となった。</p> <pre class="code lang-ruby" style="overflow: auto; font-family: Monaco, Consolas, 'Courier New', Courier, monospace, sans-serif; font-size: 15.2px; border: 1px solid #c7dce3; margin: 0px 0px 10px; padding: 20px; white-space: pre; color: #524336; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: #ffffff; text-decoration-style: initial; text-decoration-color: initial;" data-lang="ruby" data-unlink="">①get <span class="synSpecial" style="color: #c000c0;">'</span><span class="synConstant" style="color: #ff6666;">static_pages/home</span><span class="synSpecial" style="color: #c000c0;">'</span>, <span class="synConstant" style="color: #ff6666;">to</span>: <span class="synSpecial" style="color: #c000c0;">'</span><span class="synConstant" style="color: #ff6666;">static_pages#home</span><span class="synSpecial" style="color: #c000c0;">'</span> ②get <span class="synSpecial" style="color: #c000c0;">'</span><span class="synConstant" style="color: #ff6666;">static_pages/home</span><span class="synSpecial" style="color: #c000c0;">'</span></pre> <p> </p> <p>参考:</p> <p><a href="https://qiita.com/Yaruki00/items/d677e0751c90500afc8c">Railsのroutesを読む</a></p> <p> </p> <p>↓個人的に気になったアクションとビューの対応について</p> <p><a href="https://pc.tokuvin.net/create-rails-ctrl-action/">Railsのコントローラとアクションを作成する</a></p> <p> </p> <p> </p> <p>■テスト</p> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/RSpec">RSpec</a>を使わない素のテストコードの書き方で、下の2種のテストを行う。</p> <p>・unit test (モデルのテスト)</p> <p>・functional test(コントローラ+ビューのテスト)</p> <p> </p> <p>「■<a class="keyword" href="http://d.hatena.ne.jp/keyword/rails">rails</a> g controller 〜」で実行したコマンドで作成されたテストファイルが下記のようなもの</p> <pre class="code lang-ruby" style="overflow: auto; font-family: Monaco, Consolas, 'Courier New', Courier, monospace, sans-serif; font-size: 15.2px; border: 1px solid #c7dce3; margin: 0px 0px 10px; padding: 20px; white-space: pre; color: #524336; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: #ffffff; text-decoration-style: initial; text-decoration-color: initial;" data-lang="ruby" data-unlink=""><span class="synPreProc" style="color: #9355e6;">require</span> <span class="synSpecial" style="color: #c000c0;">'</span><span class="synConstant" style="color: #ff6666;">test_helper</span><span class="synSpecial" style="color: #c000c0;">'</span> <span class="synPreProc" style="color: #9355e6;">class</span> <span class="synType" style="color: #3ec63e;">StaticPagesControllerTest</span> < <span class="synType" style="color: #3ec63e;">ActionDispatch</span>::<span class="synType" style="color: #3ec63e;">IntegrationTest</span> test <span class="synSpecial" style="color: #c000c0;">"</span><span class="synConstant" style="color: #ff6666;">should get home</span><span class="synSpecial" style="color: #c000c0;">"</span> <span class="synStatement" style="color: #d88a17;">do</span> get static_pages_home_url assert_response <span class="synConstant" style="color: #ff6666;">:success</span> <span class="synStatement" style="color: #d88a17;">end</span> test <span class="synSpecial" style="color: #c000c0;">"</span><span class="synConstant" style="color: #ff6666;">should get help</span><span class="synSpecial" style="color: #c000c0;">"</span> <span class="synStatement" style="color: #d88a17;">do</span> get static_pages_help_url assert_response <span class="synConstant" style="color: #ff6666;">:success</span> <span class="synStatement" style="color: #d88a17;">end</span> <span class="synPreProc" style="color: #9355e6;">end</span></pre> <p> </p> <p>参考:</p> <p>↓<a class="keyword" href="http://d.hatena.ne.jp/keyword/RSpec">RSpec</a>使わないテストの基本的な考え方</p> <p><a href="http://language-and-engineering.hatenablog.jp/entry/20091023/p1">Ruby on Railsのテストの書き方 (モデルの単体テストと,コントローラの機能テスト) - 主に言語とシステム開発に関して</a></p> <p> </p> <p><a href="http://ruby.studio-kingdom.com/rails/guides/testing">Railsのテスト | Rails日本語ドキュメント | Ruby STUDIO</a></p> <p> </p> <p>●assert_select</p> <p>2つの書式があり、<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%BB%A5%EC%A5%AF%A5%BF">セレクタ</a>で指定された要素が条件に一致する場合と、選択された全ての要素が条件に一致する場合である。</p> <p>今回でいうと、about.html.erbファイル内の<title>タグ内に<span style="color: #000000;"><span class="synSpecial">"<span class="synConstant">About</span></span><span class="synConstant"> | <a class="keyword" href="http://d.hatena.ne.jp/keyword/Ruby%20on%20Rails">Ruby on Rails</a> Tutorial Sample App</span><span class="synSpecial">"と一致しなければテスト結果で「Red」となる。</span></span></p> <p> </p> <p>※下のコードは"static_pages_controller_test.rb"内のAboutアクションに関するテスト部分である</p> <pre class="code lang-ruby" style="overflow: auto; font-family: Monaco, Consolas, 'Courier New', Courier, monospace, sans-serif; font-size: 15.2px; border: 1px solid #c7dce3; margin: 0px 0px 10px; padding: 20px; white-space: pre; color: #524336; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: #ffffff; text-decoration-style: initial; text-decoration-color: initial;" data-lang="ruby" data-unlink="">test <span class="synSpecial" style="color: #c000c0;">"</span><span class="synConstant" style="color: #ff6666;">should get about</span><span class="synSpecial" style="color: #c000c0;">"</span> <span class="synStatement" style="color: #d88a17;">do</span> get static_pages_about_url asse_response <span class="synConstant" style="color: #ff6666;">:success</span> assert_select <span class="synSpecial" style="color: #c000c0;">"</span><span class="synConstant" style="color: #ff6666;">title</span><span class="synSpecial" style="color: #c000c0;">"</span>, <span class="synSpecial" style="color: #c000c0;">"<span class="synConstant" style="color: #ff6666;">About</span></span><span class="synConstant" style="color: #ff6666;"> | Ruby on Rails Tutorial Sample App</span><span class="synSpecial" style="color: #c000c0;">"</span> <span class="synStatement" style="color: #d88a17;">end</span></pre> <p> </p> <p>ちなみに<title>は、ブラウザの<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%C4%A1%BC%A5%EB%A5%D0%A1%BC">ツールバー</a>の表示されるタイトルのことである。</p> <p>参考:</p> <p>↓公式リファレンス</p> <p><a href="https://railsguides.jp/testing.html">Rails テスティングガイド | Rails ガイド</a></p> <p> </p> <p>↓assert_selectの基本的な使い方(分かりやすい!)</p> <p><a href="http://d.hatena.ne.jp/zariganitosh/20080405/1207455670">assert_selectの使い方 - ザリガニが見ていた...。</a></p> <p> </p> <p>■埋め込み<a class="keyword" href="http://d.hatena.ne.jp/keyword/Ruby">Ruby</a></p> <p>●provide及びyeildについて</p> <p><span style="color: #333333; font-family: -apple-system, system-ui, 'Segoe UI', 'Helvetica Neue', 'Hiragino Kaku Gothic ProN', メイリオ, meiryo, sans-serif; font-size: 16px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: #ffffff; text-decoration-style: initial; text-decoration-color: initial; display: inline !important; float: none;">provide関数(<% provide(:title, 'Home') %>)を使ってViewからLayoutにデータを引き渡すことが出来る。今回は一つのhtmlファイル内で呼び出しているが、これも同様の使い方だろうか。</span></p> <p>yieldに関しては、「レイアウトを使う際に、/static_pages/homeにアクセスするとhome.html.erbの内容がHTMLに変換され、<%= yield %>の位置に挿入される、ということだけ理解しておけば問題ありません。」との記載。</p> <p> </p> <p>●application.html.erbについて</p> <p>上で疑問に思って点が説明されていた。背景としては、「home,help,aboutの3つのファイルがあるけど、ページの内容とかタイトルとかほぼ一緒だよね?まとめようぜ」という感じ。</p> <p>application.html.erbファイルに共通するコード部分を書いておいて、各ファイルで異なる部分に関しては"yield"を使って引数を与えてみたり、個別のhtmlファイルを引っ張ってきたりする感じかな。</p> <p>参考:</p> <p><a href="http://ruby-rails.hatenadiary.com/entry/20140810/1407603600#ctrl-pass-data">Railsでビューのレイアウトを指定する - Rails Webook</a></p> <p><a href="https://qiita.com/rentalgambler/items/3fd7c050b4ad2c424957">provide関数とyield</a></p> <p><a href="https://qiita.com/sanstktkrsyhsk/items/e7d27c6717b430302967">yieldについて</a></p> <p> </p> <p>■(発展)minitest reportersについて</p> <p>テスト結果を<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%D7%A5%ED%A5%B0%A5%EC%A5%B9%A5%D0%A1%BC">プログレスバー</a>で表示してくれる。gemでインストールして使用する。使用方法に関しては「参考:」のリンク先を参照のこと。</p> <p> </p> <p>参考:</p> <p><a href="https://github.com/kern/minitest-reporters">GitHub - kern/minitest-reporters: Create customizable MiniTest output formats.</a></p> <p><a href="https://qiita.com/baban/items/88e18a784eaf39efb6e0">minitestのオススメ基本設定調べてみた</a></p> <p> </p> <p> </p> <p> </p>