🌚

【Rails】hidden_field

2023/08/14に公開

hidden_fieldとは

HTMLのフォーム要素<input type="hidden">を作るためのヘルパーメソッド。
ユーザーからは見えないが、フォーム内のデータをサーバーに送信するために使う。例えば、フォーム内ではデータを持っておく必要はあるが、ユーザーには表示したくない場合に使う。

基本の使い方

<%= form_with(model: @user, url: users_path, local: true) do |f| %>
  <%= f.hidden_field :user_id, value: @user.id %>
  <!-- 他のフォーム要素をここに追加 -->
  <%= f.submit "Submit" %>
<% end %>


上記の例は、`hidden_field`を使用して`user_id`という属性を送信してる。フォーム内の他のフォーム要素と同様にサーバーに送信するが、ユーザーには表示されない。

## 複数のhidden_fieldを使う場合
```ruby
<%= form_with(model: @order, url: orders_path, local: true) do |f| %>
  <%= f.hidden_field :order_id, value: @order.id %>
  <%= f.hidden_field :user_id, value: current_user.id %>
  <!-- 他のフォーム要素をここに追加 -->
  <%= f.submit "Submit" %>
<% end %>

上記の例は、複数のhidden_fieldを使って、注文IDとユーザーIDをフォームと一緒に送信している。

コントローラでの受け取り

送信されたデータは、コントローラ内で通常のフォームデータと同じように受け取ることができる。

class OrdersController < ApplicationController
  def create
    @order = Order.new(order_params)
    # 他の処理
  end

  private

  def order_params
    params.require(:order).permit(:order_id, :user_id, ...)
  end
end

order_paramsメソッド内で、order_iduser_idを受け取ることができるようになる。

注意点

hidden_fieldは開発者ツール等を使うと、ブラウザで確認することができるため、送るデータには注意が必要。
例えば、パスワードクレジットカード情報セッション情報認証トークン などは絶対に送ってはいけない。

Discussion