[英]how to delete record from a join table in rails
我有一個具有兩個記錄list_id
和car_id
。 我想刪除一條記錄,例如list_id = 5
和car_id = 7
。 這是我在控制器部分的代碼:
def deletejoin
@car = Car.find(params[:id])
end
def destroyjoin
# car = Car.find(params[:id])
# list = List.find(params[:list_id])
# car = Car.find(21.to_i)
# list = List.find(8)
# puts car
# puts list
car = Car.find(params[:id])
@list = car.lists.find(params[:list_id])
cars_lists.where(car_id: 25).destroy_all
# @list.cars.where(:id => params[:id]).destroy_all
# @list = @car.cars_lists.find(params[:list_id])
# @list.destroy
# car = Car.find(params[:id]).destroy
flash[:notice] = "Car #{car.name} destoryed successfully"
redirect_to(:action => 'index', :list_id => @list.id)
end
嘗試這個,
def delete_join
car = Car.find(params[:id])
list = List.find(params[:list_id])
CarsLists.where(car_id: car.id, list_id: list.id).destroy_all
end
此代碼通過匹配car_id和list_id從聯接表car_lists中刪除所有記錄。
首先,您當前的代碼顯示了兩種不同的方法(“ deletejoin”和“ destroyjoin”)。 您只需要一種方法即可執行此操作。
其次,您未指定用戶應如何銷毀數據。 由於您在代碼中使用了'params [:id]'和'params [list_id]',因此我假設您將通過表單或http url獲得car_id和list_id。
就是說,有了“ destroyjoin”功能,代碼的某些部分就可以了,但是另一部分是錯誤的。 我將為您提供詳細信息:
car = Car.find(params[:id])
上面的代碼部分沒問題。 您的確會獲得帶有id = params [:id]的汽車。
@list = car.lists.find(params[:list_id])
代碼的第二部分是錯誤的。 確實,當您使用“ car.lists”時,您將獲得與給定汽車相關的所有列表的集合(如果願意,可以使用“數組”)。 在此集合上,您不能使用ActiveRecord方法“查找”。 ActiveRecord的“查找”只能在諸如Car(請注意用大寫字母“ C”)或“ List”(請注意用大寫字母“ L”)之類的類上調用。
相反,您應該使用以下代碼查找列表:
list = List.find(params[:list_id])
然后,一旦您要銷毀汽車並銷毀清單,就可以直接使用其ID(“ list.id”和“ car.id”)識別它們。 此外,您可以查找要破壞的聯接表實例。 為此,我假設您還有一個與“汽車列表”聯接表相關的模型,該模型的類應使用大寫字母:CarsLists。 因此,代碼應為:
CarsLists.where(car_id: car.id, list_id: list.id).destroy_all
最后,如果汽車或列表被銷毀,我想您也將要銷毀CarsLists記錄。 如果是,則只需要轉到car.rb模型和list.rb模型來編寫以下內容:
class Car < ActiveRecord::Base has_many :carslists, dependent: :destroy end class List < ActiveRecord::Base has_many :carslists, dependent: :destroy end
非常感謝您的幫助,以下代碼解決了該問題,現在僅從連接表中將其刪除
cars = Car.find(params[:id])
list = cars.lists.find(params[:list_id])
cars.lists.delete(params[:list_id])
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.