将form_tag重新格式化为form_for以使用格式

时间:2017-02-10 02:02:19

标签: ruby-on-rails forms ruby-on-rails-4

我的form_tag视图中有edit

<%= form_tag stage_batch_path(@stage_batch), multipart: true, class: 'form-inline', role: 'form', method: :put do %>
  <div class="form-group">
    <%= label_tag 'csv_batch_file', 'Select batch file' %>
    <%= file_field_tag 'csv_batch_file', class: 'form-control' %>
  </div>
  <br>
  <div class="form-group">
    <%= label_tag 'potential_item_id', 'Input item id' %>
    <%= text_field_tag "potential_item_id" %>
  </div>
  <br>
  <%= button_tag 'Stage', class: 'btn btn-primary' %>
<% end %>

目前putstage_batches/:id这是我想要的。

但是,我想向其他控制器添加post的另一个按钮,比如说Foo#create。我在another answer中读到formaction选项可行。但是,给定的示例使用form_for而非form_tag

<% form_for(something) do |f| %>
    ...
    <%= f.submit "Create" %>
    <%= f.submit "Special Action", formaction: special_action_path %>
<% end %>

如何将form_tag重写为form_for

1 个答案:

答案 0 :(得分:1)

<%= form_tag stage_batch_path(@stage_batch), multipart: true, class: 'form-inline', role: 'form', method: :put do %>

==&GT;

<%= form_for @stage_batch, url: stage_batch_path(@stage_batch), multipart: true, class: 'form-inline', role: 'form', method: :put do |f|%>

同样如下:

<%= form_for @stage_batch, class: 'form-inline' do |f|%> #if @stage_batch is new_record? then method: :post, else method: :put

PS:你应该尝试这个https://github.com/plataformatec/simple_form,一个救星。

使用simple_form,您的表单可以转换为:

<%= simple_form_for @stage_batch do |f|%>
  <%= f.input :csv_batch_file, as: :file %>
  <%= f.input :potential_item_id %>
  <%= f.submit 'stage' %>
<%end%>
简单而美丽。