Пользовательский первичный ключ Rails: SQLite3 :: ConstraintException: ограничение NOT NULL не выполнено - PullRequest
0 голосов
/ 17 февраля 2020

У меня есть пользовательский первичный ключ (PK), ASIN, в моей таблице продуктов. Этот PK является строкой.

  def change
    create_table :products, id: false do |t|
      t.references :user, null: false, foreign_key: true
      t.primary_key :asin
      t.string :image
      t.string :price
      t.string :title

      t.timestamps
    end
      change_column :products, :asin, :string
  end

В моих моделях для Product у меня есть следующее:

  self.primary_key = 'asin'
  belongs_to :user

  validates_uniqueness_of :asin
  validates_presence_of :asin, :image, :title, :price, :user_id

  before_save :before_save

  def before_save
    self.asin  = self.asin.upcase!
  end

Я просматривал код несколько раз, но при попытке попасть на этот маршрут и создайте продукт, это ошибка, которую я получаю.

"exception": "#<ActiveRecord::NotNullViolation: SQLite3::ConstraintException: NOT NULL constraint failed: products.asin>"

И это JSON, который я отправляю на этот маршрут создания

{
    "asin": "B",
    "title": "Test",
    "image": "test",
    "user_id": 1,
    "price": "test"
}

ПРИМЕЧАНИЕ : Я знаю, что в этом поместье обычно считают свысока, и, пожалуйста, знайте, что я это понимаю, но это идеальная установка для цели моего проекта. Пожалуйста, воздержитесь от оставления подлых комментариев.

РЕДАКТИРОВАТЬ : Для справки, здесь есть функция Создать под контроллером продуктов.

  skip_before_action :authorize_request, only: [:create, :show]

  def create
    Product.create!(product_params)
    json_response(product_params, :created)
  end

  def product_params
    params.permit(
        :asin,
        :image,
        :title,
        :user_id,
        :price
    )
  end

1 Ответ

0 голосов
/ 17 февраля 2020

РЕДАКТИРОВАТЬ: Частично проблема заключалась в том, что первое письмо асина необходимо было прекратить, перед отправкой на сервер.

Я не совсем уверен, что здесь произошло, чтобы это исправить. Но я выполнил следующие команды только для проверки, так как был уверен, что эта настройка базы данных прошла отлично.

Сначала я остановил сервер с помощью control + c на ма c.

Я подключился к рельсам с помощью rails c Я подключился к таблице продуктов с помощью Product.connection И я создал Тестирование продукта просто для того, чтобы увидеть, что не так отправить запрос еще раз, и на этот раз он отправлен.

Надеюсь, это кому-нибудь поможет, потому что это было странно странно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...