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| %>※モデル  

     

感想

やっと、「ruby」と「rails」が繋がってきた!!!  

モデル.newでインスタンス生成していたり、パラムスというメソッド(ユーザーが入力した値をいれる箱)を使って、モデルから値を取り出していたり、意味がわかって面白かった。