我正在尝试删除属于另一个类对象的类对象,但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
删除按钮(使用布尔玛类供参考)
此外,该文件位于我的动物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,因为该目击者属于该动物。我以为我是在这样做,但是正如我在上面说的那样,删除按钮是删除动物本身,而不是实际的特定瞄准点。
在此先感谢您的帮助/说明。
答案 0 :(得分:0)
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
而言绝对是给定模型配置所必需的。
您要么配置了错误的路线,要么向我们展示了与真实控制器不同的控制器。