Ruby
Rails

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

パーフェクトRubyを読む ぜんぶ(だんだんむずくなった)

ぱぁーと大体の内容を掴んで、今後こういう機能があったなとメタで思い出せて、詳しく使う時にまた調べられるように概要の理解。

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

途中でrubyの練習用にjupyter notebookを使いたい。
色々あるけどこれがよかった。

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

['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の完了ページに分かれている
  • 管理画面がある。管理画面では、1申し込み内容一覧が見れる。2申し込み内容から納品ページに飛べる。3納品ページでは複数枚の納品ができる。4納品が完了したら、完了ページにて納品した枚数全てが確認できる
  • 1、トップページににて、アルバムのうち一枚がサムネイル表示されている。2、サムネイルをクリックすると詳細ページに飛べる

bootstrapの導入もちろんscssを使う。
ちなみにこれだけじゃ、ダメで

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

これもやらなければいけない。

bootstrapを導入する場合はこういうページも参考にする

sqliteじゃなくてmysqlのDBを使うんだ。

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

バリデーションの確認をするならここ
綺麗な申し込みフォームを作るならここ
そういえばストロングパラメータってなんだ?ってなったらここ
No route matchのエラーが出たらここ

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

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

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

このようなことを作ってくれるのは、resourcesというマッチングのおかげなので、resourcesを使わない場合は、自分で以下のような記述を行う。
post 'apply/confirm' => 'apply#confirm'
詳しくルーティングについて知りたいときはここ
database.ymlとは何か
そしてアソシエーションを極める

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

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

rails g migration change_datatype_title_of_articles
rails g migration change_datatype_カラム名 _ of _ テーブル名

datatypeのところに変更数データタイプを入れるのではなく、マイグレーションファイルを作った後に、変更をうつ。

管理画面を作ろう

ルーティング

config/routes.rb
namespace :admin do
  resources :order
end

コントローラー

app/controllers/admin/order_controller.rb
class Admin::OrderController < ApplicationController
end

ビュー

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

+追加情報
エラーの原因になるから、googleで一年以内の情報のみをとる。
bootstrapについて詳しくなりたいとき
bootstrap テンプレートで検索
bootstrap コンポーネントで検索

管理画面を綺麗に作る

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