Как динамически добавить поле в форму - PullRequest
1 голос
/ 08 апреля 2019

В моей форме я хотел бы динамически добавить поле, когда флажок установлен.

У .select-qty есть css dislpay: none

<%= form_with model: @item,  html: { class: "update-form", method: :patch, remote: true }  do |f| %>
  <%= f.hidden_field :id, value: item.id %>
  <td class="mulitple-item">
    <%= f.check_box :selected, { checked: true, value: item.selected, class: 'form-control', onchange: 'this.form.submit();' } %>
 </td>
 <td class="select-qty>
  <%= f.select :quantity, options_for_select((0..item.quantity), selected: 2), {}, { value: item.quantity, class: 'form-control', onchange: 'this.form.submit();' } %>
 </td>
<% end %>

У меня есть это update.js.erb, которое должно сделать поле появившимся ...

$('.multiple-item').bind('.update-form').bind('.submit-btn').bind('ajax:success', function(){
 $(".select-qty").css("display", "block")
});

в моих маршрутах у меня есть это:

patch "items", to: "items#update",  defaults: { format: 'js' }

и мой контроллер #update

def update
 @item = Item.find(params[:id])
     @item.update_attributes(item_params)
   respond_to do |format|
     format.js
    end
 end

Когда я проверяю флажок, он отображает необработанный код update.js.erb в браузере ...

Что я делаю не так?

Ответы [ 2 ]

0 голосов
/ 09 апреля 2019

Я наконец удалил defaults {format: :js} в моих маршрутах

patch "items", to: "items#update"

и добавил формат html в свой метод обновления ....

def update
 @item = Item.find(params[:id])
     @item.update_attributes(item_params)
   respond_to do |format|
     format.js
     format.html {redirect_to my_path}
    end
 end
0 голосов
/ 09 апреля 2019

method и remote не должны быть внутри хеша html: {}, поскольку на самом деле это не атрибуты html, а опции вспомогательного метода form_with.

Фактически, html-форма имеет атрибут method, однако этот параметр обычно передается методу form_with вне хеша html, поскольку Rails не только включает его в сгенерированную html-форму в качестве атрибута, но и также делает что-то еще.

Это правильный путь:

<%= form_with model: @item,  method: :patch, remote: true, html: {class: "update-form"}  do |f| %>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...