删除(销毁)属于另一个类对象的类对象
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了删除(销毁)属于另一个类对象的类对象相关的知识,希望对你有一定的参考价值。
我试图删除属于另一个类对象的类对象,但destroy方法实际上是删除has_many
的类对象而不是删除单挑的belongs_to
类对象。我在这里错过了什么?
Animal.rb
class Animal < ApplicationRecord
has_many :sightings, dependent: :destroy
end
Sightings.rb
class Sighting < ApplicationRecord
belongs_to :animal
end
瞄准控制器
class SightingsController < ApplicationController
def index
@sightings = Animal.sightings.all
end
def create
@animal = Animal.find(params[:animal_id])
@sighting = @animal.sightings.create(sighting_params)
redirect_to @animal
end
def new
@animal = Animal.find(params[:animal_id])
@sighting = @animal.sightings.create(sighting_params)
end
def edit
@animal = Animal.find(params[:animal_id])
@sighting = @animal.sightings.find(params[:id])
end
def update
@animal = Animal.find(params[:animal_id])
@sighting = @animal.sightings.find(params[:id])
if @sighting.update_attributes(sighting_params)
redirect_to @animal
else
redirect_to 'edit'
end
end
def destroy
@animal = Animal.find(params[:animal_id])
@sighting = Sighting.find(params[:id])
@sighting.destroy
redirect_to root_path
end
private
def sighting_params
params.require(:sighting).permit(:animal_id, :date, :time, :latitude, :longitude)
end
end
删除按钮(使用Bulma类FYI)此外,它位于我的ANIMAL show.html.erb
文件中。
<%= link_to "Delete Sighting ID#: #{sighting.id}", sighting_path(sighting), method: :delete, data: { confirm: "Are you sure you want to delete this sighting?" }, class: "button is-danger" %>
据我了解,为了删除/破坏动物的目击,我需要在删除目击之前收集动物ID,因为目击属于动物。我以为我这样做但是如上所述,删除按钮正在删除动物本身,而不是实际的特定目击。
在此先感谢任何帮助/澄清。
答案
class Animal
has_many :sightings, dependent: :destroy
end
当你摧毁Animal
时,相依的毁灭将摧毁所有的目击。
我需要在删除瞄准之前收集动物ID,因为瞄准属于动物。
假。如果你想破坏一次目击,你只需要它的ID:
def destroy
@sighting = Sighting.find(params[:id])
@sighting.destroy
end
删除按钮正在删除动物本身,而不是实际的特定目击
坦率地说,如果你已经正确完成了路由,这是不可能的。该按钮应该转到SightingsController。在你的SightingsController中,你永远不会有@animal.destroy
,这对于在你的模型配置下摧毁Animal
是绝对必要的。
您要么错误配置了路线,要么向我们展示了与真实路线不同的控制器。
以上是关于删除(销毁)属于另一个类对象的类对象的主要内容,如果未能解决你的问题,请参考以下文章