30歳 独学で始めるプログラミング ~WEBデザイン・アプリ開発~

ITスキルに興味がでたので、codeを書いてみたら面白くてハマってしまいました!日々何をやったのかを中心に、記事を書いていきたいと思います。

47日目:Ruby on Rails Ⅲ:新規投稿機能作成、フォームタグ、リダイレクト、オーダー(form_tag、redirect、order)

<学習日>

47日目

<学習内容>

① Ruby on Rails Ⅲ(54-100%):新規投稿機能作成、フォームタグ、リダイレクト、オーダー(form_tag、redirect、order)

<参考>

Progateレベル:197

 

<学習内容詳細>

f:id:yakuzen_kokoro:20200820234525p:plain

今日はRuby on Rails Ⅲを完了することが出来ました!

 

 

① Ruby on Rails Ⅲ(54-100%):新規投稿機能作成、フォームタグ、リダイレクト、オーダー(form_tag、redirect、order)

f:id:yakuzen_kokoro:20200820234534p:plain

 

Ruby on Rails Ⅲの後半の内容としては、新規投稿機能を作成するというものでした^^

 

今までの単元で、ルーティング、コントローラー、データベース間のやり取りは少し慣れてきたのか、同じような感じで必要なデータのやり取りをcodeに落としていけば完成品になりました!

 

ではさっそく、具体的なcodeをあげながら、本日の勉強を振り返っていきましょう!

 

・一般的な投稿機能の実装
大まかな流れは以下のとおり。

①投稿フォームで投稿する

②そのデータをアクションでとらえて、データベースのテーブルに情報を追加して、保存する。

③必要に応じて、データベースから情報を引っ張り出して、表示するなりする。


・フォームの値を受ける方法

urlを受けてアクションを指定するのはgetだが、フォームの値を受けて、アクションを指定するにはpostで記載が必要。

例えば、createアクションにnewのフォームで書かれた内容を受けて渡すには、以下のとおり。

 

<ルーティング>
post "posts/create" => "posts#create"

 

<newビュー>
<%= form_tag("/posts/create") do %>
htmlの処理
<% end %>


・処理をするだけで、実際のページを作らないアクションについて

新規投稿の内容を取得して、必要な情報を飛ばしたりするだけのアクションは、実際のページは不要となる。

例えば新規投稿をした後は、再び投稿一覧に戻ったりするが、そのときはリダイレクトというメソッドを用いている。

具体的なcodeは以下のとおり。

 

<コントローラー>
def create
redirect_to("/posts/index")
end


で最終的にはデータベースに投稿を保存して、その内容を投稿一覧に反映させたいわけだから、その場合は以下のとおり。

 

<newビュー>
<%= form_tag("/posts/create") do %>
<textarea name="content"></textare>
<% end %>


<コントローラー>
def create
@post = Post.new(content:params[:content])
@post.save
redirect_to("/posts/index")
end


さらに投稿を日時順に並び替えたい場合は以下の修正を加えればOK

 

<コントローラー>
def index
@posts = Post.all.order(created_at: :desc)
end

 

一連の流れとしては、以下のとおり。

 

①ビューでcreateに送る値にハッシュをつける。この方法がname="content"というものを、textareの属性に追加

②コントローラでname="content"を受け取って、それに対応するデータベースを作成し、保存している。

③投稿一覧でorder(created_at: :desc)にて、作成日時の降べきで並び替えよ、と命令している

 

ということで、本日は新規投稿のページを作成して、データベースを更新し、その値を読む機能が実装できました^^

 

 

ではでは、1日でも長く続けられるように頑張っていきます^^

同志の方、一緒に頑張っていきましょう!