学んだことを説明する:Railsで投稿フォームからのデータベースへの保存方法

19日目です。

本日はRailsでデータベースへの保存の仕方を主に学びました。

投稿した文書をデータベースへ保存し、ページへの投稿までを自分の言葉で説明します。

 

まずビュー(new.html.erb)で投稿フォームを作成します。

その時、<textarea></textarea>や<input type="submit" value="投稿">といったコードで入力フォームや投稿ボタンを作ります。

ただ、これだけだと文字を入力して投稿ボタンを押しても何も反応しません。

 

そのため、form_tagを用いて、送信用のURLを引数として渡します。

下記のようなコードです。

<%= form_tag("/ URL")do %>

 <textarea></textarea>

 <input type="submit" value="投稿">

<% end %>

 

ただ、これだと投稿ボタンを押して送ることはできますが、保存方法を指定していないので投稿一覧画面に変化はありません。

そこで、下記のようにname="キー"としてname属性を作ります。

<%= form_tag("/ URL")do %>

 <textarea name="キー"></textarea>

 <input type="submit" value="投稿">

<% end %>

 

そして、create メソッドを使ってコントローラー(〇〇_controller.erb)に投稿を保存するアクションを定義します。

def create

 モデル名.create(カラム名: params[:キー])

end

paramsは、フォームに入力された文字(値)をキーとして受け取りハッシュでまとめています。対応するキーがデータベースの指定されたカラムに収納されていきます。

 

そして、リクエストがきた際にどの対応をするかルーティング(routes.rb)に記述します。

post  "/URL" => "コントローラー名#create(アクション名)"

(getメソッドではなくpostメソッドです。)

 

これだけでもデータベースには保存してくれるので、URLを指定すれば一覧画面で投稿内容を見ることができるのですが、できれば投稿ボタンを押した瞬間に一覧画面に遷移して投稿内容を見たいので、redirect_toメソッドをアクションに追記します。

def create

 モデル名.create(カラム名: params[:キー])

 redirect_to("/一覧画面のURL")

end

 

これでフォームに文字を入力して投稿してから投稿画面を返すまでを実装しました。

セキュリティを高めるため、ストロングパラメーターを使う方法など、まだまだ上記のコードを改善できる余地はたくさんあると思うので、色々な書き方を学ぶようにします。

 

下記のサイトが分かりやすくまとめられていました。

https://qiita.com/chocode/items/61b91aa0e08637a8ad91

 

ーーーーーーーーーーーーーーーーーーーー

本日覚えたコマンド

command + A(全選択)

一括コピーや削除にとても便利ですね。

最近は下記を使いこなせるようになってきたので、多少スムーズになってきたと思います。

command + L(列選択)

command + X(コピーして切り取り)

command + C(コピー)

command + V(貼り付け)

command + Z(取り消し)

command + →|(表示画面切り替え)

command + スペース(Spotlight検索)

 

ついに明日、TEC::EXPERT第57期キックオフです。

事前学習は60%終了、

チェリー本は9章と10章を残しタイムアップでした。

2週間前に掲げた、キックオフ前日までの進捗目標は「事前学習2/3終了」かつ「チェリー本1周」でしたので、達成率は約90%ほどでした。

進捗が遅れているときにどう挽回していくかはこれからの課題です。

 

受験勉強でも毎日10時間学習できたのは3日連続が限界だったと思いますが、日に日にわかることが増えどんどん楽しくなっているので、困難な時も楽しみながらやり抜きます。