20200928_アウトプット
学んだこと(railsの復習・MVC)
ルーティング
get "posts/index" => "posts#index" get "posts/new" => "posts#new" get "posts/:id" => "posts#show" post "posts/create" => "posts#create"
「get "posts/:id" => "posts#show"」→詳細ページに飛ぶ時、URLにテーブルのidを利用する。
なお、「get "posts/index" => "posts#index"」と混同してしまうため、idを指定するURLは、同じHTTPメソッドgetの「index」や「new」より下に書く。(ルーティングは合致するURLを上から探すため。)
コントローラー
def show @post = Post.find_by(id: params[:id]) end
Postモデルの中から、ユーザーが入力した値に対応するidを見つける→パラムスの箱からidを元に取り出したpostデータを、@postに代入する。(カラムを指定する時は「カラム名:」と書く。)
@postのようなインスタンス変数にすることでビューにも使えるようにする。
def create @post = Post.new(content: params[:content]) @post.save redirect_to("/posts/index") end
ポストモデルにおいて、「カラム名がコンテント」の中にある、「ユーザーが入力した値(コンテント)が入っている箱(パラムス)」を生成する。 保存する。(コンソールを利用してもOK)
「create」のビューを作るのではなく、保存された時にリダイレクトtoメソッドを使って、()の中に飛びたい先のURLを書く。
def index @posts = Post.all.order(created_at: :desc) end
オーダーメソッドにより並び替えができる。
「created_at: 」はカラム名。
「:desc」(降順=新しいもの順)、「:asc」(昇順=古いもの順)
イメージとしては、上の階に行くほど積み重なる知識の階段を想像した。1階から2階に行く時は昇っていくので古いものから新しいものという意味、2階から1階に降りる時は、新しいものから古いものへ、という順番で理解した。
ビュー
<% @posts.each do |post| %> <div class="posts-index-item"> <%= link_to(post.content, "/posts/#{post.id}") %> </div> <% end %>
eachメソッドを使って、取り出している。
link_to(クリックする対象,"クリックして飛ぶURL先")で指定できるrailsのメソッドなので<%で囲む。
<%= form_tag("/posts/create") do %> <div class="form"> <div class="form-body"> <textarea name="content"></textarea> <input type="submit" value="投稿"> </div> </div> <% end %>
ネーム属性が、パラムスのキーになっていた!
フォームタグは、railsのメソッドなので<%で囲む。
フォームに入力されたデータを送信することができる。「form_tag(送信先のURL) do」のように送信先のURLを指定する。
doとendの中に、フォームを作る。(divなどもその中へ入れ込む)
- application.html.erbのなかに、body要素にあたるheaderをいれる。「<%= yield %>」の中に、各ビューが吸い込まれている。
パラムスについて
パラムスは以下の2通りの使い方がある。
「:〇〇」を使ったルーティングのURLから値を受け取る。
「name="〇〇"」がついたフォームの入力内容(つまりビュー)から受け取る。
理解が浅いところ(つみ残し)
includes(:user)※コントローラー →解決
.merge(user_id: current_user.id)※コントローラー →解決
redirect_to action: :index unless user_signed_in?※コントローラー →解決
プライベートメソッド※コントローラー →解決
<%= form_with(model: @tweet, local: true) do |form| %>※モデル
感想
モデル.newでインスタンス生成していたり、パラムスというメソッド(ユーザーが入力した値をいれる箱)を使って、モデルから値を取り出していたり、意味がわかって面白かった。