我创建了一个Address
具有多态关联的模型,我试图通过客户端模型的嵌套属性保存到它,但我得到Address addressable must exist
in the @client.errors
.
Models:
class Client < ApplicationRecord
has_one :address, as: :addressable, dependent: :destroy
accepts_nested_attributes_for :address, :allow_destroy => true
end
class Address < ApplicationRecord
belongs_to :addressable, polymorphic: true
end
控制器:
class ClientsController < ApplicationController
def new
@client = Client.new
@client.create_address
end
def create
@client = Client.new(client_params)
if @client.save
...
else
...
end
end
private
def client_params
params.require(:client).permit(:first_name ,:last_name, :company, address_attributes: [:line1, :line2, :line3, :city, :state_province, :postal_code, :country])
end
end
您应该添加inverse_of https://api.rubyonrails.org/classes/ActiveRecord/Associations/ClassMethods.html#module-ActiveRecord::Associations::ClassMethods-label-Setting+Inverses关键在你的belongs_to
关系,例如在你的Address
class:
class Address < ApplicationRecord
belongs_to :addressable, polymorphic: true, inverse_of: :addressable
end
这将正确保存嵌套地址,因为 Rails 现在将正确知道要在addressable
.
不要使用optional
键,除非addressable
确实是可选的。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)