如何动态地向表单添加字段

时间:2019-04-08 19:24:59

标签: ruby-on-rails ajax

在我的表单中,我想在选中复选框时动态添加一个字段。

.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 :(得分:0)

methodremote不应位于html: {}哈希中,因为它们实际上不是html属性,而是form_with helper方法的选项。

事实上,html表单具有method属性,但是此选项通常在form_with散列之外传递给html方法,因为Rails不仅将其包括在生成的html中表单作为属性,但还有其他功能。

这是正确的方法:

<%= form_with model: @item,  method: :patch, remote: true, html: {class: "update-form"}  do |f| %>

答案 1 :(得分:0)

我终于在路线中删除了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