LoginSignup
6
4

More than 3 years have passed since last update.

Railsでフォームの内容をcookieに保存する

Posted at

目的

データベースを用いずに、フォームの内容を保存する。

方法

まずは viewファイルにフォームを用意します。

<%= form_for(:data, url: fluit_path) do |f| %>

   <%= f.label :"好きな果物" %>
   <%= f.text_field :fluit, class: 'form-control' %>

   <%= f.check_box :check %> 林檎を食べたことがある。
  
   <%= f.label :"好きな果物(セレクト)" %>
   <%= f.select :select, ["葡萄","蜜柑","檸檬"] %>

   <%= f.submit "保存",  class: "btn btn-success" %>
  <% end %>

form_for を用いて任意のアクションに :data を飛ばします。

def fluit
    cookies.permanent[:fluit] = params[:data][:fluit]
    cookies.permanent[:check] = params[:data][:check]
    cookies.permanent[:select] = params[:data][:select]
...
end

任意のアクションで :data を受け取り、cookies に格納します。
ここではほぼ永続の .permanent でクッキーを生成していますが、自分で期限を設定することもできます。

参考:Rails チュートリアル | 9.1.2 ログイン状態の保持

あとはフォームでクッキーの値を受け取るだけです。

<%= form_for(:data, url: fluit_path) do |f| %>

   <%= f.label :"好きな果物" %>
   <%= f.text_field :fluit, class: 'form-control', value: cookies[:fluit] %>

   <%= f.check_box :check, checked: ischeck(cookies[:check])  %> 林檎を食べたことがある。
  
   <%= f.label :"好きな果物(セレクト)" %>
   <%= f.select :select, ["葡萄","蜜柑","檸檬"], :selected => cookies[:select] %>

   <%= f.submit "保存",  class: "btn btn-success" %>
  <% end %>

テキストフォームは単純に value: cookies[:fluit] で受け取るだけで、セレクトボックスもだいたいそんな感じです。
チェックボックスは checked:truefalse を渡す必要があるので少々工夫が必要です。
cookies[:check] の値は 01 になっています。

  def ischeck(x)
    x == "1" ? true : false
  end

今回はヘルパーに三項演算子を使ったメソッドを書いて、それで補完しました。

これにて完成です。

6
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
4