创建新的HABTM关联对我来说很好,但是每次我尝试更新它们时,所有关联都会被删除。
这就是我的更新操作的样子。
def update
params[:dish][:cuisine_ids] ||= []
params[:dish][:diet_ids] ||= []
@user = current_user
@dish = @user.dishes_selling.find_by(:id => params[:id])
@dish.cuisines = Cuisine.where(:id => params[:dish][:cuisine_ids]) ### (1) ###
@dish.diets = Diet.where(:id => params[:dish][:diet_ids]) ### (1) ###
if @dish
respond_to do |format|
if @dish.update(dish_params) ### (2) ###
format.html { redirect_to dish_path(@dish), notice: 'Dish was edited.' }
else
format.html { render action: 'edit' }
end
end
else
flash[:error] = "You can only edit your dish!"
render :index
end
end
我的菜参数看起来像这样
def dish_params
params.require(:dish).permit(:title, :desc, cuisine_ids: [:id], diet_ids: [:id])
end
如果在编辑状态下,我单击“烹饪”的两个复选框,则在步骤(2)上的日志将读取此内容(仅注释Delete
且无更新或为cuisine_dishes
表插入)
(0.1ms) begin transaction
SQL (0.4ms) DELETE FROM "cuisines_dishes" WHERE "cuisines_dishes"."dish_id" = ? AND "cuisines_dishes"."cuisine_id" IN (7, 9) [["dish_id", 61]]
SQL (0.2ms) UPDATE "dishes" SET "desc" = ?, "updated_at" = ? WHERE "dishes"."id" = 61 [["desc", "yema1245"], ["updated_at", "2014-06-12 06:57:36.622811"]]
(5.5ms) commit transaction
Redirected to http://localhost:3000/dishes/61
Completed 302 Found in 48ms (ActiveRecord: 13.7ms)
问题:为什么更新的HABTM关联为什么要尝试删除该关联,而不是尝试创建不存在的关联,而尝试创建新的关联(如果不存在则删除)。
您应该尝试使用<<运算符而不是=;
@dish.cuisines << Cuisine.where(:id => params[:dish][:cuisine_ids]).last
这应该在两个表中都添加而不是替换所需的ID。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句