如何拒绝Rails更新方法并触发JavaScript警告框?

时间:2015-11-23 08:16:48

标签: javascript ruby-on-rails ruby ruby-on-rails-4 rails-activerecord

我控制器内的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提醒使用零(0pax值更新每日订单。

我尝试在update方法中使用byebug来检查params[:pax],但它什么也没有返回。它是空白的。

enter image description here

但新更新的pax值已在数据库中成功保存。

enter image description here

我尝试在我的模型中使用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");

我该怎么做:

  1. 如果输入的pax0
  2. ,则拒绝更新
  3. 如果输入的pax0
  4. ,则触发JS提醒框
  5. 维护数据库中的旧pax

2 个答案:

答案 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才会调用