我想允许更新,但想排除特定列的更新并创建它自己的更新方法。
问题:我是否可以定义订单参数但排除特定列?甚至将这些列分成方法?
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个方法' ?
因此,当我/卖方取消订单时,我可以创建自定义消息,发送电子邮件等,并对“已收费”和“已创建”执行相同的操作。...
答案 0 :(得分:0)
我是否可以定义订单参数,但排除特定参数 专栏?
容易。 Antoinette Abbate 84
Adaline Aker 99
Alyce Arvin 72
Amos Amerine 90
Anneliese Atnip 73
Almeda Austria 86
方法可用于从(列入白名单的)参数哈希中删除一个或多个键。
#except
或者甚至将列分成方法?
要记住的一件事是ActionController::Parameters
实际上是一个非常基本的哈希,类似于object,您可以根据需要编写白名单函数。
order_params.except(:order_status)
在类固醇上的工作原理类似于Hash#slice
-它返回一个新的#permit
实例,其ActionController::Parameters
属性设置为true。它还为nested parameters采用了哈希参数。
您还可以使用数组来组合来自不同方法的白名单。因为ActionController :: Parameters中的所有方法都是可归约的,所以这可能非常漂亮。诀窍是使用the splat(*) operator将数组转换为参数列表:
permitted