アウトプット 基礎
🔳🔳10日目
🔳HTML
・エンジニアによって書くコードは異なる。
よって、いかにストックを持っておくかが重要
◎display: flex;
親要素に与えるもの。横並びにできる便利なやつ。ブロック要素にできる?
◎justify-content: 〜〜;
display: flex;を付与した親要素にかけると色々と調整できる
つまり、display: flex;がないと機能しない
◎align-items
子要素の縦方向を指定する
➡️"基本的に"縦の真ん中に来る(他のプロパティがあったら、来ない場合もある)
つまり、display: flex;がないと機能しない
◎text-align
インライン要素のみに適用できる?
文字や画像を中央に持ってくる
◎Syntax Error
文法や構文(書き方)が正しくない時に出るエラー。
ソースコード見れば原因分かるよ!
◎ER図
テーブル同士の関係を視覚的にわかりやすく表した図。
ER図を描くことでテーブル間の関係性が視覚的になり、分かりやすくなる。
◎プライベートメソッド
クラス外から呼び出すことのできないメソッドのこと
◎上記のメリット
1.Classの外部から呼ばれたら困るメソッドを隔離
2.可読性
🔳tweets_comment_pathがないエラー
エラー画面でtweet_pathじゃない?って言われても、欲しいパスは違う。
・prefixで調べてもtweets_comment_pathはなかった。
➡️ネストしないとPrefixのパスが変わる。
ネストしたら変わった。
〜勉強会〜
🔳④:redirect_to_index, except: :index
◎except index追加しないとエラーが起こる理由
◎excep: :indexがないverの動きの流れ
➡️例)indexに行きたい!でもログインしてないからダメ!redirect_to_indexによって戻される。でもログインしてないとindexに入れない。以下ループ
🔳⑥答えおかしい
◎問題内容が投稿を保存できるようにしろ
◎答え移しても保存できない
・理由
params.require(:tweet).permit(:text, :image)➡️答えこれだけ
.mergeでuser_id取得してない。
tweets.rbのvalidatesで、user_idが空白だとダメって設定してる
=データ保存できない
🔳7
◎belongs_to :user
何故このエラーなのか➡️エラー文でuserがスペルミスって言われるから
🔳9
◎@tweets = user.tweets
・このtweetsはどこから来た➡️userで指定したidのtweetsを全部拾ってくるから
アソシエーションが関係している
的確な答えはない。イメージ。
🔳🔳9日目
◎ruby return
rubyは基本的には、メソッドの中で最後に自動で値を返してくれるけど、
while文を使ったときに返してくれなかったり、(Mr.Tanaka現象)
他の言語(PHPとか)では必要な場合が多い。
だからreturn文をサボらないで書く。習慣化させる
◎require(2回目)
requireがあることで、
Railsがparamsのもう一階層深いtweetの中の値を探しに行けるようになる。
基礎の模試②
🔳Rails問題3
◎<%= render partial: "tweet", collection: @tweets %>
◎<%= render @tweets %>
こういう書き方もあるんだな。程度の認識
🔳Rails問題4
◎model: [@tweet, @comment]
tweet_comment_path モデルの順番とPrefix合わせる
◎<%= form.text_area :text, placeholder: "text" , rows: "2" %>
・rows: "2"はクエリによって取得が想定される行数(表示するビューの見た目を変える)
rowsを10にしたらテキスト幅めっちゃ広くなる
🔳Rails問題7
◎def.search(search)
・引数はsearches_controllerの中のsearch[params[:keyword]から持ってきた
🔳link_to tweets_searches_pathの中でなぜmethod: :GET 必要?
本来HTTPメソッドをpostで探すけど、
whereで無理やり変えてるからgetで指定する必要がある。
・ここは正直どうでもいい。
🔳🔳8日目
◎引数
・メソッドに渡す材料
◎ストロングパラメーター
指定したキーを持つパラメータしか受け取らないようにする。頑固者にさせる。
例)params.permit(:キー名, :キー名)
◎「current_user」と「if user_signed_in?」は同じ意味
◎require
このモデルからしか受け付けないよ
例).require(:モデル名)➡️.require(:tweet)
中間テストrails ④回答
form_tag=requireいらない
form_withはモデル名が必要だけど、form_tagは必要ない➡️つまりrequireは不要
◎リセットCSS
➡️詳しくはレッスン3「基本のWebサービスを作ろう」に書いてある。
・ブラウザは最低限の見た目を保証するために、元々CSS持ってる。
・でも、ブラウザ次第でこちらの意図しない表示になる場合がありけり。
・リセットCSSはこれらを打ち消すためにある。
・具体的には、デフォルトのCSSはmarginが用意されてることがあるが、
リセットCSSでこれらのmarginを0にする。
◎pending migration error
実行してないマイグレーションファイルがあるときに起こるエラー
解決策:bundle rxec rake db:migrate
🔳ログイン状態の区別
◎user_signed_in?
・ユーザーがサインイン済かどうかを判定する
こちらの方がログイン状態を確認できる正しい形。
current_userでもいいけど、コードとしては前者のほうが良い。
◎current_user
・サインインしているユーザーを取得する
◎「margin: auto;」と「margin: 0 auto;」の違い
前者=上下左右に対してautoを適用
後者=上下0,左右に対してautoを適用
🔳🔳6日目
Verb(HTTPメソッド)は、GETの場合には省略できる
destroy: :delete 必要 リンクだから
create , updateは自動で振り分けてくれるからいらない。
配列の定義=[ ]
ハッシュの定義={}
🔳モデル
◎情報のやり取りに関する処理を担当
例)
・バリデーション
・has_many
・belongs_to
🔳HTML
◎display: flex; と align-item: center; はセット
🔳🔳5日目
◎Prefix
ルーティングの名前?
URLパターンと意味は一緒。書き方が違うだけ。
例)"/posts/#{@post.id}/edit" と edit_post_path(@post.id) の意味は一緒
二つとも同じeditアクションが発火する
railsが推奨してるのはPrefix
設定しなくてもrails側が値(rootとかnew_post)を自動的に用意してくれる。
例)
・Prefix ・Verb ・URIパターン ・Controll#Action
・edit_post ・GET ・/posts/:id/edit ・posts#edit
の場合、
html.erbファイルにコードを書く時は
edit_post_path(@post.id) と "/posts/#{@post.id}/edit"
どちらも表示される結果は同じ(編集ページ)
◎Verb
HTTPリクエストメソッド
右側に表示するパスにどのHTTPメソッドでアクセスするか書いてある
(GET=表示 , POST=登録 , DELETE=削除 , PATCH=変更や更新)
◎ URI Pattern
コントローラーの割り当てを決める
リクエストされるときのURLを表す
例)posts#index➡️postsコントローラーのindexアクションが呼び出される
◎リファクタリング
長いコードを削除したり改善すること
◎resources
・only
呼び出すアクションを限定
例)resources :posts, only: [:get , :show]
get、showアクションのみを呼び出す
・except
このアクションは除外する
例)resources :posts, expect: :index
indexアクションを除外する。他は全て実行
🔳🔳4日目
🔳アウトプット
◎rails db:rollback
ミスったらrails db:rollback
◎require_tree
全部のcssをアルファベット順に見るrequire_tree
◎form_with
form_tagの進化系form_with
自動的に振り分ける機能を持つ。強い。
例)new➡️create , edit➡️update
form_with使うときはprivateアクションでrequire(条件限定 :post)もセット
例)params.require(:post).permit~
resourceメソッド➡️7つのアクションを纏めたメソッド
index,new,create,show,edit,update,destroy
◎アソシエーション(紐付け)
has_many(postを複数管理する)と、belongs_to(データを一つずつ結ぶ)
has_many➡️posts
belongs_to➡️user
アソシエーションとincludesメソッド(N+1が増えないよう管理)はセット
render➡️部分テンプレートを呼ぶメソッド
partial➡️具体的にどのテンプレを呼ぶオプション
locals➡️partialで定義したパスの中で変数を使えるようにする(each文が良い例)
<% render partial: "post", locals:{post: post} %>
<%= render partial: "post", locals: { post: post } %>
🔳メンター
◎user_path(post.user)
➡️(post.user)のuserは何を指してる?
➡️user_path(post.user_id)じゃダメ?
表示結果は同じなのに
◎回答
書き方の問題。結論どちらでも良い。
目標(実装したい機能)と結果を大事にする。その間の過程がコード
書いたコードより、結果が出ることの方が重要
コードが分かりやすい方がいいけど、最悪結果が出ればok
今回の場合で分かりやすいのは、(post.user_id)だからこっちを書く。
今回の質問は、Railsの開発者に聞いた方がいいレベル
◎form_withの送信先自動で決まる(IDの有無)
new➡️create
edit➡️update
◎form_with model: @postの@postはアクションの中のインスタント変数
edit_post_path = ルート検索
例)高速道路で道を決める
(@post.id)=大量のデータから一つを見つけるとき
例)Twitterで一つの欲しいツイートのページを開くとき
🔳🔳二日目
◎Flexbox
親要素に「display: flex;」を付与することで子要素が横並びになる。
そしてそれらの並び順や幅は詳細に決めることができます。
これらの機能の総称をFlexboxといいます
◎display: inline-block;
よく分からんから見直す
◎Viewport
ブラウザの表示領域に依存
◎%
親に依存
◎パス
ディレクトリやファイルの所在を示す文字列のこと
例)desktop➡️ls➡️index.html
このindex.htmlがパス
◎引数のルール
1.「メソッドを定義している部分」と「メソッドを呼び出す部分」両方に書く
例)def rename(name) と rename(name)
2.「仮引数」と「実引数」の名前は、一致している必要はない
例)view_post(a_post) と view_post(posts) など
🔳🔳一日目
ショートカットまとめ
⌃ + A(入力時)その行の先頭に移動する
⌃ + E(入力時)その行の末端に移動する
⌃ + H(入力時)前の文字を1つ消す(deleteと同じ)
⌃ + D(入力時)次の文字を1つ消す
⌃ + K(入力時)カーソルの右側の文字を全て削除する
↑入力したコマンドの履歴を遡る (入力途中で)tab入力補完
※ ls現在いるディレクトリのファイルを表示する
cd XXX現在いるディレクトリにある、XXXディレクトリに移動する