【Ruby】データの保存(パラメーター)
今回はフォームから送信されたデータを
テーブルに保存する方法を学びましょう。
まずは今までと同じ、ルーティングから。
routes.rbに追記します。
今回HTTPメソッドは何を使うべきでしょうか。
作成して送信を行います。
そう、POSTですね。
なのでルーティングは以下の通りになります。
post 'posts' , to : '' posts#create "
今回はpostsコントローラーのcreateアクションを実行したい、ということです。
このcreateは、保存してレコードを作成する処理を行います。
そして一つ前の記事で記載したformのコードをみてみましょう。
<%= form_with url : "/posts" , method : post , local : true do | form | %>
<% end %>
パスとHTTPメソッドに注目してみましょう。
同じですよね!
このようにフォームのルーティングと繋げているのです。
このことでフォームに入力されたデータがcreateアクションによって処理されて、
テーブルに保存されるようになっています。
ではそのcreateアクションを定義しましょう。
postsコントローラーのファイルに記載します。
def create
end
とりあえず空のcreateアクションを。
そしてあとはこのcreateアクションに対応するビューですね。
「投稿が完了しました!・トップページに戻る」
的なページが欲しいですね。
create.html.erbというファイルを作成しましょう。
<h1>投稿が完了しました!</h1>
<%= link_to 'トップページに戻る' , '/posts' %>
/posts はトップページへのパスですね。
これでビューは完成です。
次に保存機能を実装しましょう。
まだデータを保存する機能がないので、実際には投稿内容は表示されません。
まずは流れから。
ユーザーがフォームを送信した時、
サーバーへのリクエストにはパラメーターを含ませることができます。
パラメーターとは、サーバー外部から渡される情報。データのことです。
そしてRailsのコントローラーにたどり着くパラメーターは
paramsという箱に格納されて届けられます。
今回、フォームの構造は以下の通りでしたよね。
<%= form.text_field : content %>
<%= form.submit '投稿する' %>
このtext_fieldのキーである :content でparamsに格納されます。
つまり、params(:content)という形でコントローラーに送られるということですね。
では実際にこの処理を書きましょう。
この時使用するのがcreateメソッドです。
こちらもActiveRecordメソッドの一つで、引数に処理を記述し実行すれば
保存をしてくれる便利なものです。
今回はcontentカラムにparams(:content)の情報を保存します。
これはフォームに入力されたデータが入っている箱だからです、
その場合はこのように記述します。
Post . create ( content : params[ : content ] )
まずこのcreateメソッドはモデルが使用できるActiveRecordメソッドなので、
モデル名を記載します。
そのあとのcontentはテーブルのカラム名、
params[ : content ]はいうまでもなく送られてきたデータですね。
なので、これはなんて言ってるのかというと
テーブルのcontentカラムにparams[ : content ]を保存して!と言ってます。
これをコントローラーのcreateアクションに記述します。
でないとcreateアクションが実行されても保存されないからです。
def create
Post.create( content : params[ :content] )
end
これでOKです。
以上で一通りのアプリケーションの仕組みの解説は終わりです。