Rails: 如何在 form_for 中使用 hide_field?

我读过 这个,但是我是 RoR 的新手,所以理解它有点困难。我正在使用一个表单来创建一个新的请求记录,并且我需要发送的所有变量都已经存在。下面是我需要发送的数据(在 do 循环中) :

:user_id => w[:requesteeID]
:requesteeName => current_user.name
:requesteeEmail => current_user.email
:info => e

下面是我的表单,到目前为止仍然有效,但是对于所有内容只发送 NULL 值:

<% form_for(:request, :url => requests_path) do |f| %>
<div class="actions">
<%= f.submit e %>
</div>
<% end %>

如何使用 hide _ fields 发送已有的数据? 谢谢阅读。

121408 次浏览

Ref hidden_field or hidden_field_tag

<% form_for(:request, :url => requests_path) do |f| %>
<div class="actions">
<%= f.hidden_field :some_column %>
<%= hidden_field_tag 'selected', 'none'  %>
<%= f.submit e %>
</div>
<% end %>

then in controller

 params[:selected]="none"
params[:request][:some_column] = request.some_column

Note when you used

   <%= f.hidden_field :some_column %>

it change to html

<input type="hidden" id="request_some_column" name="request[some_column]" value="#{@request.some_column}" />

and when you used

<%= hidden_field_tag 'selected', 'none'  %>

it change to html

   <input id="selected" name="selected" type="hidden" value="none"/>

You can send a custom value as a hidden input for your model like that:

<%= f.hidden_field :your_model_field_name, value: 12 %>

Where value: 12 is just a demo, but you can pass whatever value you need.

To elaborate more on Bruno Paulino's answer.

I had this same concern when working on a Rails 6 application.

I had a form for books, but I needed to pass in the current user's id into the form for each book that will be created in a hidden manner.

My initial form field was this way:

<div class="field">
<%= form.label :user_id %>
<%= form.text_field :user_id %>
</div>

I had to modify it to this using this:

<div class="field">
<%= form.hidden_field :model_field_name, value: field_value %>
</div>

So I had this after on:

<div class="field">
<%= form.hidden_field :user_id, value: current_user.id %>
</div>