私は非常に単純なブログアプリケーションを使用してRoRを学習しています。新しいカテゴリを追加している間に、私は引き続き ActiveRecord :: RecordNotUniqueをAdmin :: CategoriesController#に作成します。アクティブなadminレールを使用している場合のプライマリキー違反5
レコードは既にカテゴリテーブルに存在するため、違反があります。しかし、IDは生成されたdbであり、永続的な値を使用しないでください。私は私のカテゴリ管理コントローラにpermit_paramsを追加しました。
カテゴリー管理コントローラ
ActiveAdmin.register Category do
permit_params :id, :name
end
私はidが主キーであると生成DBれるべきであることを指定する方法を知りません。それは私が永続化の通常の手段を使用する場合、これは私が私の質問が明確であり、任意の適切な情報を見逃していないと思っている私の通常カテゴリコントローラ
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
でうまく働きました。 また、テーブルに4つのカテゴリがある場合、違反が4回発生すると、それ以上違反がないので5回目を送信します。
これは愚かな問題のように思えるが、私は何の解決策を持っていない:(
許可のparamsから:id
を削除
Ananth
これは機能しませんでした。 'permit_params:title、:body、:category_id'のような管理者のコントローラは、違反エラー' AdminResponse :: RecordNotUnique in Admin :: PostsController#create PG :: UniqueViolation:ERROR:重複したキー値が一意の制約 "posts_pkey" DETAIL:キー(id)=(3)はすでに存在します。 :INSERT INTO "posts"( "title"、 "body"、 "category_id"、 "created_at"、 "updated_at")VALUES($ 1、$ 2、$ 3、$ 4、$ 5) "ID"を返す – ananth
私はこれを実行すると、最終的に何かユニークなものが挿入され、問題はなくなりますが、なぜキーのDB生成が機能していないのか分かりません。 – ananth
**テーブルを作成した**移行を投稿できますか? INSERT文が見つかったようで、 'id'を送ることさえないので、DBレベルで何かが間違っている必要があります。 –