Help us understand the problem. What is going on with this article?

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

目的

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

方法

まずは 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

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

これにて完成です。

hukurouo
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした