我正试图弄清楚我在Rails 4应用程序中设置多态关联时似乎一直存在的问题。
我有一个项目模型和一个地址模型。协会是:
资料
has_many :addresses, as: :addressable
accepts_nested_attributes_for :addresses, reject_if: :all_blank, allow_destroy: true
地址
belongs_to :addressable, :polymorphic => true
我之前就同样的问题问了这个问题。我不能(现在仍然不能)理解该帖子中的答案:Rails 4 - Polymorphic associations
这一次 - 当我尝试通过插入地址来更新配置文件时,我遇到了一个问题。该错误消息将问题标识为来自配置文件控制器中的更新操作。更新操作包括:
我的个人资料控制器更新操作有:
def update
# successful = @profile.update(profile_params)
# Rails.logger.info "xxxxxxxxxxxxx"
# Rails.logger.info successful.inspect
# user=@profile.user
# user.update.avatar
# Rails.logger.info "prof xxxxxxxxxxxxx"
# Rails.logger.info @profile.update(profile_params)
respond_to do |format|
if @profile.update(profile_params)
format.html { redirect_to @profile }
format.json { render :show, status: :ok, location: @profile }
else
format.html { render :edit }
format.json { render json: @profile.errors, status: :unprocessable_entity }
end
end
end
错误消息显示:
ERROR: duplicate key value violates unique constraint "index_addresses_on_addressable_type_and_addressable_id"
DETAIL: Key (addressable_type, addressable_id)=(Profile, 1) already exists.
有谁知道这条消息的含义,以及如何解决它?
答案 0 :(得分:0)
在您的数据库中,您设置了一个唯一约束:您可以转到数据库以查看您通过名称" index_addresses_on_addressable_type_and_addressable_id"设置的内容。如错误消息所示,您尝试更新已使用另一条记录的值(Profile,1)的记录 要解决此问题,有两种解决方案: 一个来自数据库方面: 你需要知道为什么对地址有一个独特的约束。如果不需要,可以将其从数据库中删除。 另一个是在将数据更新到数据库之前确保(addressable_type,addressable_id)是唯一的。
希望这可以提供一种帮助