Rails 4 - 与嵌套多态属性的更新操作的多态关联

时间:2016-08-09 01:31:02

标签: ruby-on-rails ruby polymorphic-associations

我正试图弄清楚我在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.

有谁知道这条消息的含义,以及如何解决它?

1 个答案:

答案 0 :(得分:0)

在您的数据库中,您设置了一个唯一约束:您可以转到数据库以查看您通过名称" index_addresses_on_addressable_type_and_addressable_id"设置的内容。如错误消息所示,您尝试更新已使用另一条记录的值(Profile,1)的记录 要解决此问题,有两种解决方案: 一个来自数据库方面: 你需要知道为什么对地址有一个独特的约束。如果不需要,可以将其从数据库中删除。 另一个是在将数据更新到数据库之前确保(addressable_type,addressable_id)是唯一的。

希望这可以提供一种帮助