【发布时间】:2018-11-17 03:44:21
【问题描述】:
我想允许更新但想排除特定列的更新并创建它自己的更新方法。
问题:有没有办法让我定义我的订单参数但排除特定列?或者甚至将列分成方法?
def order_params
params.require(:order).permit(:name, :email, :image, :video, :description)
end
我的问题是,我的更新方法中有条带收费,所以当我简单地更新订单“order_status”时,客户会被收费。
我有一列“order_status”,可以通过枚举 1、2、3 进行更改,我想避免在其中进行更新,因此不收取任何费用。
我创造了:
def order_status
params.permit(:order_status)
end
但是由于原来的order_params有:orders,所以还是包含了订单状态。
我的枚举为“已创建”、“已收费”和“已取消”。卖家可以通过以下方式取消订单:
<%= form_for @order, remote: true do |f| %>
<%= f.hidden_field :order_status, value: "cancelled" %>
<%= f.button type:'submit', class: "btn btn-danger", onclick: "refreshPage()" %>
<% end %>
我应该怎么做才能让这个“order_status”更新独立于原始更新方法之外,这样客户就不会被收费?
更新:
我确实找到了一种方法来简单地创建它自己的收费方法,并使用所有参数从更新方法中扣除费用..
def charge_update
respond_to do |format|
@amount = (@order.order_price).to_i * 100
@amount_seller = (@order.order_price).to_i * 75
if @order.update(params[:tracking_number])
if user_signed_in?
charge = Stripe::Charge.create({
:amount => (@order.order_price).to_i * 100,
:description => 'Rails Stripe customer',
:currency => 'usd',
:customer => @order.stripe_customer_token,
:destination => {
:amount => @amount_seller ,
:account => (@order.seller.stripe_token),
}
})
@order.order_status = "charged"
format.html { redirect_to @order, notice: 'Order was successfully uploaded.' }
format.json { render :show, status: :ok, location: @order }
else
format.html { render :edit }
format.json { render json: @order.errors, status: :unprocessable_entity }
end
end
end
end
客户只有在订单发出后才会被收取费用。
但是,我如何指定参数状态本身?
例如,我想为 order_status 创建一个方法,但仅适用于 order_status = "cancelled"... 然后为其他 2 个可能的状态创建另外 2 个方法' ?
因此,当我/卖家取消订单时,我可以创建自定义消息、发送电子邮件等,并对“已收费”和“已创建”执行相同操作......
【问题讨论】:
-
But since the original order_params has :orders, the order status is still being included.你能再解释一下吗? -
我实际上想出了一个方法,但我仍然想听听您或其他人要说什么,以防有其他或更好的方法。但是通过拥有:orders,我想这包括所有列,因为即使我删除了“order_status”,它仍然会更新。但是我所做的只是为上面的 order_status 创建一个新方法,将费用放在那里,并从原始更新方法中删除费用......这样它只在订单完成而不是随机更新时收费
-
你总是可以做类似
@order.update_column :order_status, new_value的事情,它只会设置对象的值,更新数据库的值,仅此而已(没有验证,没有回调,什么都没有)。跨度> -
就像这样:def xyz - if @order.update(params[:video]) - @order.update_column :order_status, "charged" - end ?? (假设“-”是中断/返回)??这基本上是说,如果上传了视频(这意味着订单已完成),那么将状态更改为收费?
-
对不起,我想我没有澄清我想要的。我想知道如何从控制器的方法中的列中确定一个值。因此,如果我从视图中更改列值,比如说用按钮,那么控制器会做出反应。因为 order_status 有 3 个不同的值,我希望每个值都有不同的反应
标签: ruby-on-rails ruby