見出し画像

【💻】ProgateのRails講座メモ

ProgateのRails講座を一番最初から1周するよ。知らなかったところとか、あとで見返すかもなところあったらとりあえずメモする用の記事。

※何かの拍子で記事に迷い込んだ方へ。

完全に自分のメモ用アウトプット記事になります🙌
読みやすさや完成度・記事の信憑性には自信ありません( -`ω-)👍🏻

プログラミングに関してはドがつくほどの初学者です。
そんなん当たり前やろという事柄に関して世紀の発見かのように驚くレベルのため、内容がとんでもなく薄い記事もあるかも…。
とにかく間違っていても”自分の言葉で”を意識しております、ご了承ください😖



モデルとコントローラーとテーブルの命名規則


モデル: 単数形・頭文字大文字(例: User)

コントローラー: 複数形・頭文字大文字・末尾に Controller(例: UsersController)

テーブル名: 複数形・小文字(例: users)

rails generate controllerについて


「rails generate controller コントローラー名 アクション名」やから同じコントローラー名でコマンド複数回実行はできない。

Usersコントローラーと対応ファイルが生成される。アクション名の記載もされる
$ rails generate controller Users index

すでにUsersコントローラーが作成されてるから下記コマンドは実行できない。
$ rails generate controller Users show


raila g modelで複数カラムを登録したい場合


複数のカラム同時に登録したい場合は、並べたらOK!

$ rails g model User name:string email:string
# Userがモデル名
# カラム名:データ型の形で並べる。


マイグレーションファイルのみ追加する場合


「rails g migration ファイル名」を使用する

rails g migration add_image_name_to_users

作成されたマイグレーションファイルにおいて、例えばカラムを追加したい場合は「add_column:テーブル名, :カラム名, :データ型」の形で記載した後
「rails db:migrate」を実行する。

class AddImageNameToUsers < ActiveRecord::Migration[5.0]
  def change
    add_column :users, :image_name, :string
  end
end



画像を使用する場合


使用する画像は「public」フォルダに配置。"/画像名"の形で指定すると表示ができる

<img src= "/tweets.png">
みたいな感じ。


scssについて


rails g controllerコマンドを使用してコントローラーを作成したら、対応したscssが「app/assets/stylesheets/」に作成される。
homeコントローラーを作成したら「app/assets/stylesheets/home.scss」ができる感じ。
手動でコントローラー作成した場合は、スタイルシートも自分で作成せなあかん感じらしい。

erbファイルの<% %>と<%= %>について


erbファイルは「Embedded Ruby(埋め込みRuby)」の略。
・<% %>でrubyコードの記述が可能
・<%= %>で実際にブラウザに埋め込んで表示することができる。
<% %>の場合は、ページに何も表示されない。

erbファイル内で変数への代入
<% post1 = "投稿1" %>

実際に埋め込んで表示
<%= post1 %>


link_toメソッド


<a>タグの代わりにlink_toメソッドを使用できる
<%= link_to("詳細", "/about") %>
<a href ="/about">詳細</a>に変換される。

:idについて


ルーティングでposts/:idみたいな感じで指定したら、posts/1でもposts/2でも希望のアクション呼び出すことができる。

どのidであってもPostコントローラーのshowメソッドを呼び出すことができる。
get "posts/:id" => "posts#show"

ダメな例

posts/:idの順番に注意。posts/indexよりも前に書くと、localhost:3000/posts/indexは
posts/:idの方を参照してしまう。

get "posts/:id => "posts#show"
get "posts/:index => "posts#index"

form_tagメソッドについて


フォームの内容を指定のURL先に送信するためのメソッド。
<%= form_tag(送信先のURL) do %>って感じで指定する。
<%= %>なことに注意& endで囲む。

# 投稿ボタンを押すと,textareaの中の内容がposts/createに送信される

<%= form_tag("/posts/create") do %>
  <textarea></textarea>
  <input type="submit" value="投稿">
<% end%>


redirect_toについて


createとかupdateとかdestroyとか、新しいビューを用意するんじゃなくてどこか違うページに転送したいときに使うメソッド。
基本的にはデータの作成とか削除後にリダイレクトを使うから、indexアクションとかnewメソッドでリダイレクトはあまり使わない。

paramsで受け取れるもの


paramsを使用して取得できるのは…

・ルーティング設定の:idとか、URLの中の値
・name = "◯◯"が付いたフォームの内容

# params[:id]で:idを取り出せる。
get "posts/:id => アクション名

# paramas[:◯◯]でその入力内容を取り出せる。
<textarea name="◯◯"></textarea>


ルーティング時のGETとPOSTの使い分け


get:データベースを変更しないアクション
post:データベースを変更するアクション

おおまかにこれつかんでれば大体OKかも。
destroy,updateあたりだけよね、postは。

post用のlink_toメソッド


link_toはデフォルトでgetのルーティングを探してしまうから、destroyとかのアクション使う時は、{method: "post"}を第三引数に追加する。

<%= link_to("削除","/posts/#{@post.id}/destroy",{method:"post"}) %>

これでpostで書かれてるルーティングを探してくれる

post "posts/:id/destroy" => "posts#destroy"


renderメソッド


ridirect_toと違って、別のアクションを経由せずにそのまま指定のビューを表示することができる。例えば140字のバリデーションがついてる投稿で141字にしてもうたみたいなとき
・ridirect_to => 編集前の文字が再表示される。
・render => 141字打ち込んだ文字が再表示される。
renderの方が、打ち込んだ文字が消えちゃったりして書き直しみたいな悲しいことにならないよね。っていう感じ。

render("フォルダ名/ファイル名")で指定する。redirectはルーティングのURL先の指定なのに対しこっちはファイル名。注意やね。

  def update
    @post = Post.find_by(id: params[:id])
    @post.content = params[:content]
    if @post.save
      redirect_to("/posts/index")
    else
      render("posts/edit")
    end


.erros.full_messagesについて


saveメソッド呼び出し時にバリデーションに引っかかると
.erros.full_messagesにエラー内容が配列で格納される。
each分で格納されたエラーメッセージを表示できる処理を書く感じ。

<% @post.errors.full_messages.each do |message| %>
  <div class="form-error">
    <%= message %>
  </div>
<% end %>


フラッシュメッセージ


1度だけ表示される用のメッセージ使いたいときはflash[:notice]に代入

value属性にRuby埋め込み


<input name="email" value="<%= @user.email>" >
# value="値"""の部分に埋め込む



とりあえず置く用の箇条書きメモ


・viewファイルの中身がブラウザに表示される内容。

・ルーティングは「config/routes.rb」で定義される。→routes.rbに記述してないURLはそもそも表示されない。

アプリに新しいページ追加したかったら?→ルーティング設定、コントローラーのアクション設定、ビューを用意する必要がある

・localhost:3000で表示されるアクションの指定は「get "/" =>」でOK!

・一覧ページは基本的にはindexのアクション名を使用する。

・変数はアクションで定義することが一般的。@で変数を始めると、ビューファイルにそのまま渡すことができる。

・マイグレーションファイルが存在する状態でアクセスするとエラーになる。マイグレーションファイル作成➡️rails db:migrateは必ずセットで行うこと。

・モデル名.allでテーブル内のデータを配列で全て取得できる。

・共通のレイアウトは「views/layouts/application.html.erb」内に記述するとまとめることができる。<%= yield %>でそれぞれのファイルの内容を表示する。

・ルーティングでデータベースに変更を加えるときはgetではなくpostにする必要がある。

・ユーザー新規登録のページは/signup