アウトプット 基礎

🔳🔳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ディレクトリに移動する

cd ..現在いるディレクトリの一つ上のディレクトリに移動する

pwd現在いるディレクトリを表示する