【问题标题】:Primary key violation when using active admin Ruby on Rails 5使用活动管理员 Ruby on Rails 5 时的主键违规
【发布时间】:2017-11-27 03:33:00
【问题描述】:

我正在使用一个非常简单的博客应用程序来学习 Ruby on Rails,并且我刚刚获得了活跃的管理员来工作。在添加新类别时,我不断得到 ActiveRecord::RecordNotUniqueAdmin::CategoriesController#create

类别表中已存在记录,因此存在违规行为。但是 id 是数据库生成的,不应该使用持久化唯一值。我在我的类别管理控制器中添加了 permit_params

类别管理控制器

ActiveAdmin.register Category do
permit_params :id, :name
end

不知道怎么指定id为主键,应该是数据库生成的。当我使用正常的持久化方式时它工作得很好,这是我的常规类别控制器

class CategoriesController < ApplicationController
  before_action :set_category, only: [:show, :edit, :update, :destroy]
  before_action :category_params, :only [:create, :new]

  def index
    @categories = Category.all
  end

  def show
    @title = @category.name;
    @posts = @category.posts;
  end

  private
    # Use callbacks to share common setup or constraints between actions.
    def set_category
      @category = Category.find(params[:id])
    end

    def category_params
          params.require(:category).permit(:name);
      end

end

此外,如果表格中有四个类别,则在四次违规后,它会提交第五次,因为不再有任何违规。

【问题讨论】:

    标签: ruby-on-rails activeadmin


    【解决方案1】:

    从允许的参数中删除:id

    ActiveRecord 为您处理。

    ActiveAdmin.register Category do
      permit_params :name
    end
    

    【讨论】:

    • 那行不通。我为我的帖子管理员控制器尝试了它,比如permit_params :title, :body, :category_id,但仍然抛出了违规错误ActiveRecord::RecordNotUnique in Admin::PostsController#create PG::UniqueViolation: ERROR: duplicate key value violates unique constraint "posts_pkey" DETAIL: Key (id)=(3) already exists. : INSERT INTO "posts" ("title", "body", "category_id", "created_at", "updated_at") VALUES ($1, $2, $3, $4, $5) RETURNING "id"
    • 就像我说的,如果我继续这样做,它最终会插入一些独特的东西,问题就会消失,但我不知道为什么密钥的 db 生成不起作用
    • 你能发布创建表的迁移吗?数据库级别肯定有问题,因为 INSERT 语句似乎找到了,甚至没有发送id
    • 很抱歉,我没有所有必要的代码了。我不得不删除并重做一切......道歉
    猜你喜欢
    • 1970-01-01
    • 2016-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多