在網上商店我有一個預訂,需要知道訂單中是否存在訂單。我有整個事情工作,但後來的細節...Rails創建連接表對象不應該創建,但在特殊情況下更新
...現在'預訂產品'(或在正常的英語:添加產品到您的購物車)增加了一個全新的預訂在每種情況下的訂單清單。它不應該在這個產品已經預訂過一次,那麼它只應該改變數量。
那麼容易吧?只是一個簡單的if語句和整個事情的作品。
bookings_controller.rb
def create
@order = current_order
# If product has already been booked
if @order.bookings.where(product_id: params[:product_id]).exists?
# Then: Only alter the quantity in the booking.
@booking = @order.bookings.where(product_id: params[:product_id])
@booking.product_quantity = params[:product_quantity]
else
# Else: Make a new booking.
@booking = @order.bookings.new(booking_params)
@product = @booking.product
@booking.product_name = @product.name
@booking.product_price = @product.price
end
@order.sum_all_bookings
@order.save
end
# ...
def booking_params
params.require(:booking).permit(:product_quantity, :product_id)
end
似乎並沒有工作。
如何在if語句中進行檢查? 或者我應該走一條完全不同的路線來更新預訂?
編輯
我已經在這個形狀gmcnaughton答案後,嘗試各種組合。我得到多個條目仍然或根本沒有條目。這一個根本沒有給我任何條目。
bookings_controller.rb
def create
@order = current_order
@booking = @order.bookings.find_or_create_by(product_id: params[:product_id])
product = @booking.product
if @booking.new_record?
@booking.product_name = product.name
@booking.product_price = product.price
else
@booking.product_quantity = params[:product_quantity]
@booking.save
@order.sum_all_bookings
@order.save
end
我應該也控制了預訂id
可能?但這沒有意義,因爲在找到現有預訂的情況下,它應該已經在那裏了。
這可能是我通過remote: true form
解僱了預訂嗎?
編輯2
而且不工作:
bookings_controller.rb
def create
@order = current_order
@booking = @order.bookings.where(product_id: params[:product_id]).first_or_initialize
if @booking.new_record?
@booking.product_id = params[:product_id]
product = @booking.product
@booking.product_name = product.name
@booking.product_price = product.price
else
@booking.product_quantity = params[:product_quantity]
@booking.save
@order.sum_all_bookings
@order.save
end
編輯3
也許這已經得到的東西,用它做:
categories_controller.rb /店
def index
@categories = Category.all.order(name: :asc)
# Voor het inzien van wat al geselecteerd is.
@order = current_order
# Voor het aanslaan van een nieuwe booking.
@booking = current_order.bookings.new
end
這基本上勾畫出了整個初始店。 @booking是爲了構建每種產品的形式。
繼工作:
def create
@booking = @order.bookings.find_by(product_id: params[:booking][:product_id])
if @booking
@booking.product_quantity = params[:booking][:product_quantity]
@booking.save
else
@booking = @order.bookings.new(booking_params)
@product = @booking.product
@booking.product_name = @product.name
@booking.product_price = @product.price
end
@order.save
end
顯然,我需要搶參數,可以通過添加[:booking]
像params[:booking][:product_id]
。任何人都知道爲什麼?
我與您的解決方案的工作,但無論我試過至今讓我結束與多個條目。 –
我上次編輯後的任何想法?我用你的想法,它應該工作,它更加優雅...但它還沒有。 –
'find_or_create_by'和'new_record?'不會在一起玩 - 如果find創建一個新模型,它將會有一個id,所以'new_record?'將會是false。 '@ order.bookings.where(...)。first_or_initialize'不工作嗎? – gmcnaughton