在我的表单中,我想在选中复选框时动态添加一个字段。
.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
的原始代码...
我在做什么错了?
答案 0 :(得分:0)
method
和remote
不应位于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