【💻】ProgateのRails講座メモ
ProgateのRails講座を一番最初から1周するよ。知らなかったところとか、あとで見返すかもなところあったらとりあえずメモする用の記事。
モデルとコントローラーとテーブルの命名規則
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
画像を使用する場合
<img src= "/tweets.png">
みたいな感じ。
scssについて
erbファイルの<% %>と<%= %>について
erbファイル内で変数への代入
<% post1 = "投稿1" %>
実際に埋め込んで表示
<%= post1 %>
link_toメソッド
:idについて
どの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]で:idを取り出せる。
get "posts/:id => アクション名
# paramas[:◯◯]でその入力内容を取り出せる。
<textarea name="◯◯"></textarea>
ルーティング時のGETと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 %>
フラッシュメッセージ
value属性にRuby埋め込み
<input name="email" value="<%= @user.email>" >
# value="値"の""の部分に埋め込む