47日目:Ruby on Rails Ⅲ:新規投稿機能作成、フォームタグ、リダイレクト、オーダー(form_tag、redirect、order)
<学習日>
47日目
<学習内容>
① Ruby on Rails Ⅲ(54-100%):新規投稿機能作成、フォームタグ、リダイレクト、オーダー(form_tag、redirect、order)
<参考>
Progateレベル:197
<学習内容詳細>
今日はRuby on Rails Ⅲを完了することが出来ました!
① Ruby on Rails Ⅲ(54-100%):新規投稿機能作成、フォームタグ、リダイレクト、オーダー(form_tag、redirect、order)
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日でも長く続けられるように頑張っていきます^^
同志の方、一緒に頑張っていきましょう!