我有3个模型。一种是财产模型,它具有两个相关的模型:租户和发票:
class Property < ApplicationRecord
belongs_to :user
has_many :tenants, dependent: :destroy
has_many :invoices, dependent: :destroy
end
class Tenant < ApplicationRecord
belongs_to :property
has_many :invoices, through: :properties
end
class Invoice < ApplicationRecord
belongs_to :property
has_many :tenants, through: :properties
end
当我尝试删除发票时,它会显示以下消息:
ActiveRecord :: RecordNotFound在TenantsController#destroy中 找不到'id'= 3 [WHERE“ tenants”。“ property_id” = $ 1]的租户
我了解到,当我尝试销毁发票时,它会尝试删除关联的承租人,并在参数中传递ID = 3,这是发票的ID。
这是我的控制器:
class InvoicesController < ApplicationController
before_action :authenticate_user!
def destroy
@property = Property.find(params[:property_id])
@invoice = @property.invoices.find(params[:id])
@invoice.destroy
flash[:alert] = "Locataire supprimé."
redirect_to user_property_invoices_path
end
end
class TenantsController < ApplicationController
before_action :authenticate_user!
def destroy
@property = Property.find(params[:property_id])
@tenant = @property.tenants.find(params[:id])
@tenant.destroy
flash[:alert] = "Locataire supprimé."
redirect_to user_properties_path
end
end
当然,参数Id = 3是错误的。如何避免所有关联的租户模型一起被发票删除?
真的非常感谢!
答案 0 :(得分:0)
我了解到,当我尝试销毁发票时,它会尝试删除关联的承租人,并在参数中传递ID = 3,这是发票的ID。
否,即使您指定了dependent: :destroy
,Rails
也会通过数据库删除它,而不是向删除的关联记录发送Http
请求。
当我尝试删除发票时,它会显示以下消息:
TenantsController#destroy中的ActiveRecord :: RecordNotFound找不到'id'= 3 [WHERE“ tenants”。“ property_id” = $ 1]的租户
您正试图删除发票,但错误消息显示正在调用TenantsController#destroy
。
我认为,您使用了错误的网址帮助程序,例如user_properties_tenant_path(@invoice.id)
而不是user_properties_invoice_path(@invoice.id)
,因此调用了TenantsController
而不是InvoicesController