有人可以看看我的代碼,並讓我知道是否有更好的方法來做到這一點,或者甚至糾正我要錯誤的地方嗎?我正在嘗試爲每個場地和變體創建一個新的行。Rails保存數組以分隔數據庫中的行
例子:
venue_ids => ["1","2"], variant_ids=>["10"]
所以,我希望在具有venue_id of 1
添加一行,與variant_id of 10
。和一個venue_id of 2
,與variant_id of 10
我得到了這個工作,它現在傳入我的兩個數組。我認爲我幾乎在那裏我不確定.each
是正確的方式,但我認爲我在正確的軌道上哈哈。但是,我提交了,我在哪裏可以放@back_bar.save
?因爲這可能會導致問題,因爲它不會重定向
在此先感謝。
def create
@back_bar = BackBar.new
@venues = params[:venue_ids]
@productid = params[:product_id]
@variants = params[:variant_ids]
# For each venue we have in the array, grab the ID.
@venues.each do |v|
@back_bar.venue_id = v
# Then for each variant we associate the variant ID with that venue.
@variants.each do |pv|
@back_bar.product_variant_id = pv
# Add in our product_id
@back_bar.product_id = @productid
# Save the venue and variant to the DB.
if @back_bar.save
flash[:success] = "#{@back_bar.product.name} has been added to #{@back_bar.venue.name}'s back bar."
# Redirect to the back bar page
redirect_to back_bars_path
else
flash[:alert] = "A selected variant for #{@back_bar.product.name} is already in #{@back_bar.venue.name}'s back bar."
# Redirect to the product page
redirect_to discoveries_product_path(@back_bar.product_id)
end
end # Variants end
end # Venues end
end
private
def back_bar_params
params.require(:back_bar).permit(:venue_id,
:product_id,
:product_variant_id)
end
咦?你正在覆蓋同一條記錄。你沒有創建多個記錄。 –
你真的需要學會寫苗條的控制器。 你應該製作一個模型方法,你只需要在ID中輸入。對於那種情況,你也可以爲它寫一個測試並確保它的工作。 我也會用大量的sql語句來做這件事,而不是使用AR來做這件事。想象你有20x20 ids。所以你做1聲明而不是400 –
@huanson這就是我想要做的,你知道任何教程可以幫助我嗎? – Alan