我控制器内的update
方法:
def update
if @daily_order.update(daily_order_params.merge({default_order:false}))
respond_to :js
else
render :edit
end
end
我pax
作为daily_order_params
中的一个参数,我现在要做的是,我想在用户尝试时显示JS提醒使用零(0
)pax
值更新每日订单。
我尝试在update
方法中使用byebug来检查params[:pax]
,但它什么也没有返回。它是空白的。
但新更新的pax
值已在数据库中成功保存。
我尝试在我的模型中使用before_update
,但我不知道如何继续前进。
before_update :reject_zero_pax_order_update
def reject_zero_pax_order_update
# i got stucked here
end
update.js.erb
console.log("record updated");
我该怎么做:
pax
为0
pax
为0
pax
答案 0 :(得分:1)
:pax属性位于:daily_order哈希中,不在params哈希中。 你的params看起来像这样:
{ daily_order: { pax: 0 }}
因此您应该使用params[:daily_order][:pax]
你的行动应该是这样的:
unless params[:daily_order][:pax] == 0
@daily_order.update(daily_params.merge{default_order: false} )
respond_to :js
else
render :edit
end
#update.js.erb
alert('hey, the pax cant be 0 ');
我假设,您希望仅在pax存在时才进行更新,否则显示警报。
答案 1 :(得分:0)
为了显示pax值的警告框不能等于0,你需要在更新按钮和pax字段上添加id或class。此外,您还必须添加隐藏字段以获取要更新的当前每日订单的ID。
# Add hidden field:
<%= hidden_field_tag "daily_order_id", @daily_order.id %>
# Add id on pax field:
<%= f.text_field :pax, id: 'daily_order_pax' %>
# Add id on update button:
<%= f.submit 'Update', id: 'update_daily_order' %>
然后在js文件中添加以下代码: -
$(document).on('click', '#update_daily_order', function(event) {
event.preventdefault();
var id = $('#daily_order_id').val();
var pax_value = $('#daily_order_pax').val();
if (pax_value == 0) {
alert("pax value can't be equal to 0");
}else {
$.ajax({
type: 'PUT',
url: '/daily_orders/' + id
data: $('#form_id').serialize();
});
}
});
只有当pax值不等于0
时,ajax才会调用