У меня есть пользовательский первичный ключ (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