Action View Form Helpers
https://guides.rubyonrails.org/form_helpers.html
一个常见的任务是上传某种文件,无论是人的照片还是包含要处理的数据的 CSV 文件。 文件上传字段可以使用 file_field 帮助器呈现。
前端进行表单的书写:
<%= form_with model: @person do |form| %>
<%= form.file_field :picture %>
<% end %><%= form_with url: "/uploads", multipart: true do |form| %>
<%= file_field_tag :picture %>
<% end %>后端进行方法的实现:
def upload
uploaded_file = params[:picture]
File.open(Rails.root.join('public', 'uploads', uploaded_file.original_filename), 'wb') do |file|
file.write(uploaded_file.read)
end
end您会注意到 HTML 包含一个类型为 hidden 的 input 元素。 这个输入很重要,因为没有它就无法成功提交非 GET 表单。 名为authenticity_token 的隐藏输入元素是Rails 的一项安全功能,称为跨站点请求伪造保护,表单助手会为每个非GET 表单生成它(前提是启用了此安全功能)。 您可以在 Securing Rails Applications 指南中阅读更多相关信息。
<%= form_with do |form| %>
Form contents
<% end %>浏览器结果:
<form accept-charset="UTF-8" action="/" method="post">
<input name="authenticity_token" type="hidden" value="J7CBxfHalt49OSHp27hblqK20c9PgwJ108nDHX/8Cts=" />
Form contents
</form>复选框是表单控件,为用户提供了一组可以启用或禁用的选项:
<%= form.check_box :pet_dog %>
<%= form.label :pet_dog, "I own a dog" %>
<%= form.check_box :pet_cat %>
<%= form.label :pet_cat, "I own a cat" %>generates:
<input type="checkbox" id="pet_dog" name="pet_dog" value="1" />
<label for="pet_dog">I own a dog</label>
<input type="checkbox" id="pet_cat" name="pet_cat" value="1" />
<label for="pet_cat">I own a cat</label>单选按钮:
<%= form.radio_button :age, "child" %>
<%= form.label :age_child, "I am younger than 21" %>
<%= form.radio_button :age, "adult" %>
<%= form.label :age_adult, "I am over 21" %>output:
<input type="radio" id="age_child" name="age" value="child" />
<label for="age_child">I am younger than 21</label>
<input type="radio" id="age_adult" name="age" value="adult" />
<label for="age_adult">I am over 21</label>others:
<p43>
<figure class="highlight"><pre><code class="language-html" data-lang="html"><span class="ni">&lt;</span>%= form.text_area :message, size: <span class="ni">&quot;</span>70x5<span class="ni">&quot;</span> %<span class="ni">&gt;</span>
<span class="ni">&lt;</span>%= form.hidden_field :parent_id, value: <span class="ni">&quot;</span>foo<span class="ni">&quot;</span> %<span class="ni">&gt;</span>
<span class="ni">&lt;</span>%= form.password_field :password %<span class="ni">&gt;</span>
<span class="ni">&lt;</span>%= form.number_field :price, in: 1.0..20.0, step: 0.5 %<span class="ni">&gt;</span>
<span class="ni">&lt;</span>%= form.range_field :discount, in: 1..100 %<span class="ni">&gt;</span>
<span class="ni">&lt;</span>%= form.date_field :born_on %<span class="ni">&gt;</span>
<span class="ni">&lt;</span>%= form.time_field :started_at %<span class="ni">&gt;</span>
<span class="ni">&lt;</span>%= form.datetime_local_field :graduation_day %<span class="ni">&gt;</span>
<span class="ni">&lt;</span>%= form.month_field :birthday_month %<span class="ni">&gt;</span>
<span class="ni">&lt;</span>%= form.week_field :birthday_week %<span class="ni">&gt;</span>
<span class="ni">&lt;</span>%= form.search_field :name %<span class="ni">&gt;</span>
<span class="ni">&lt;</span>%= form.email_field :address %<span class="ni">&gt;</span>
<span class="ni">&lt;</span>%= form.telephone_field :phone %<span class="ni">&gt;</span>
<span class="ni">&lt;</span>%= form.url_field :homepage %<span class="ni">&gt;</span></code></pre></figure>
</p43><p43>
<figure class="highlight"><pre><code class="language-html" data-lang="html"><span class="ni">&lt;</span>%= form.color_field :favorite_color %<span class="ni">&gt;</span></code></pre></figure>
</p43><code class="highlight erb">area: <span class="cp"><%=</span> <span class="n">form</span><span class="p">.</span><span class="nf">text_area</span> <span class="ss">:body</span><span class="p">,</span> <span class="ss">size: </span><span class="s2">"60x10"</span> <span class="cp">%></span>select:<%= form.select :city, ["Berlin", "Chicago", "Madrid"] %>
我们还可以指定与标签不同的 <option> 值:
<%= form.select :city, [["Berlin", "BE"], ["Chicago", "CHI"], ["Madrid", "MD"]] %>
output:
<select name="city" id="city"><br />
<option value="BE">Berlin</option><br />
<option value="CHI">Chicago</option><br />
<option value="MD">Madrid</option><br />
</select>