【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です。

 

以上で一通りのアプリケーションの仕組みの解説は終わりです。