インターン 5日目 (2月2日)

# パーフェクトRubyを読む ぜんぶ(だんだんむずくなった)
### ぱぁーと大体の内容を掴んで、今後こういう機能があったなとメタで思い出せて、詳しく使う時にまた調べられるように概要の理解。


- モジュールに定義されたメソッドは、クラスのインスタンスメソッドとして取り組むことができる。これをMix-inという。
- モジュールのメソッドをインスタンスメソッドとして取り組むためには、includeを用いる。
- 継承できるクラスは一つだけなのに対して、includeできるモジュールの数には限りがない。

途中でrubyの練習用にjupyter notebookを使いたい。
[色々あるけどこれがよかった。](http://johshisha.hatenablog.com/entry/2017/02/17/041913)

配列を操作する場面で、各要素を特定の方法で変換した新しい配列を得たい
=>このような用途にはEnumerable#mapを用います。
mapは与えられたブロックを評価した結果の配列を返す。
例えば、配列の要素の文字列を全て大文字に変換する処理は以下。

```ruby
['ruby', 'raise'].map {|str| str.upcase }
# => ["RUBY", "RAISE"]
```
Thread
Queue
Fiber


メッソド探索のまとめ
①Rubyインタプリタは、レシーバの特異クラスを参照し、メソッドを探す。
②特異クラスにメソッドがない場合、レシーバの直接のクラス(特異クラスの親クラス)を参照し、メソッドを探す
③参照したクラスにメソッドが無い場合、その親クラスを参照し、メソッドを探す
④③をメソッドが見つかるまで繰り返す
⑤継承ツリーの一番上のクラスまで4を繰り返してもメソッドが見つからない場合、このメソッド名での探索をやめる
⑥メソッド名と引数を引数にして、レシーバの特異クラスからmethod_missingが実装されているクラスを探索していく

デバッグで使用するもの
binding pry
pryは止めて見たりするもの
pry debuggerはnextとかをするための機能拡張
このデバッグについては、次にエラーが出た時に一度体系的に理解する。



では、一度最初からの開発
手順は以下

- rails new internで始める
- gitに接続
- headerを作る
- headerからトップ、撮影の流れ、申し込みの3ページにいける
- 撮影申し込みページは、1の申し込みページ、2の確認ページ、3の完了ページに分かれている
- 管理画面がある。管理画面では、１申し込み内容一覧が見れる。２申し込み内容から納品ページに飛べる。３納品ページでは複数枚の納品ができる。４納品が完了したら、完了ページにて納品した枚数全てが確認できる
- １、トップページににて、アルバムのうち一枚がサムネイル表示されている。２、サムネイルをクリックすると詳細ページに飛べる


[bootstrapの導入](https://qiita.com/tqkqt0/items/d9a3f3416c242ba48ba0)もちろんscssを使う。
ちなみにこれだけじゃ、ダメで

```ruby:app/assets/stylesheets/application.scss
* requireは使わない
 *= require_tree .
 *= require_self
 */
#の*=をそのままだとエラーが出るので*=の部分は消す。薄いけど、実は読み込みされており、文字じゃ無い!
```
これもやらなければいけない。

[bootstrapを導入する場合はこういうページも参考にする](http://bootstrap3-guide.com/compornent/navbar.html)

[sqliteじゃなくてmysqlのDBを使うんだ。](https://qiita.com/pchatsu/items/a7f53da2e57ae4aca065)

gemfileについての注意
gemfileは、まず自分のパソコンにgemをbrew等でinstallしてから、railsのアプリケーションに初めてインストールできるようになる。
よってこのままだとエラーが出るときもあるが、そのときはエラー通りに直せば良い。

[バリデーションの確認をするならここ](https://qiita.com/shunhikita/items/772b81a1cc066e67930e)
[綺麗な申し込みフォームを作るならここ]
(https://www.imd-net.com/column/1731/)
[そういえばストロングパラメータってなんだ?ってなったらここ]
(https://qiita.com/mochio/items/45b9172a50a6ebb0bee0)
[No route matchのエラーが出たらここ](https://qiita.com/kitaokeita/items/e3cd11fcd0ef0e734877)

rake routesのroutingの読み方がいまいちわかってなかったけどわかった。

```
       Prefix Verb   URI Pattern               Controller#Action
  apply_index GET    /apply(.:format)          apply#index
              POST   /apply(.:format)          apply#create
```

これの読み方は、`apply_index`にアクセスした時に、通常はアクセスの仕方として、`GET`と`POST`があるが、`GET`のときは、`apply#index`が実行され、`POST`のときは、`apply#create`が実行される。

このようなことを作ってくれるのは、`resources`というマッチングのおかげなので、`resources`を使わない場合は、自分で以下のような記述を行う。
`post 'apply/confirm' => 'apply#confirm'`
[詳しくルーティングについて知りたいときはここ](https://techracho.bpsinc.jp/baba/2014_02_17/15665)
[database.ymlとは何か](https://www.rubylife.jp/rails/model/index2.html)
[そしてアソシエーションを極める]
(https://qiita.com/To_BB/items/47d2c7b1bc3513025d7b)

albumモデルとそれに紐付けるimagesモデルを作る
albumモデルは、ただモデルの番号をつけるだけだから、alubm_name:stringだけもし必要な場合に作っといて、紐付けはもともと生成されるidでやる。
imagesモデルは、もともと生成されるidと,albumモデルに紐づけるためのalbum_idをカラム型はintengerで、imageはstring型で、**なお、アソシエーションを行うときは、お互いのカラムの型を揃える必要があります！**。


intengerじゃなくて、integerね。
[railsでカラムのデータ型間違えた場合はエディタでいじっちゃダメ](https://qiita.com/dawn_628/items/13fa64dc6d600e921ce3)
=>いじっちゃいけないのは、一度マイグレーションが行われた後なだけで、カラム型のspellミスでの場合は、そもそもマイグレーションが行われていないから、直接の変更して、そのあとマイグレーションを行えばOK!

```
rails g migration change_datatype_title_of_articles
rails g migration change_datatype_カラム名 _ of _ テーブル名
```
**datatypeのところに変更数データタイプを入れるのではなく、マイグレーションファイルを作った後に、変更をうつ。**


# 管理画面を作ろう
ルーティング

```ruby:config/routes.rb
namespace :admin do
  resources :order
end
```
コントローラー

```ruby:app/controllers/admin/order_controller.rb
class Admin::OrderController < ApplicationController
end
```
ビュー

```ruby:app/views/admin/order/ここに.html.erbを作るよ!
# htmlを適当に~
```

+追加情報
エラーの原因になるから、googleで一年以内の情報のみをとる。
bootstrapについて詳しくなりたいとき
[bootstrap テンプレートで検索](https://www.google.co.jp/search?q=bootstrap+%E3%83%86%E3%83%B3%E3%83%97%E3%83%AC%E3%83%BC%E3%83%88&source=lnt&tbs=qdr:y&sa=X&ved=0ahUKEwjjp57_7obZAhUFH5QKHXqEBzEQpwUIHw&biw=1179&bih=683)
[bootstrap　コンポーネントで検索](http://www.wivern.com/bootstrap/components.html)

[管理画面を綺麗に作る](https://www.imd-net.com/column/2760/)

復習して朝起きたらmacの液晶が割れてた。
おとしてないのに、なぜ。。。。。。。。。。