2017-02-10 2 views
0

У меня есть form_tag в моей edit зрения:переформатировать form_tag в form_for использовать formaction

<%= 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 %> 

В настоящее время он put с до stage_batches/:id чего я хочу.

Однако, я хочу добавить еще одну кнопку, которая post s другому контроллеру, скажем 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
<%= form_tag stage_batch_path(@stage_batch), multipart: true, class: 'form-inline', role: 'form', method: :put do %> 

==>

<%= 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%> 

простой и красивый.

+0

Можете ли вы добавить пример с помощью [simple_form] (https://github.com/plataformatec/simple_form) и передать «PUT» и «POST» на разные маршруты из той же формы? – mbigras

+1

Конечно. 5 минут. – brookz

+0

Но как отправить форму на один из двух разных маршрутов? Скажите 'Foo # create' или' Bar # edit'? – mbigras

Смежные вопросы