Я работаю над сайтом и создал файл миграции, чтобы сделать атрибут имени для элемента уникальным. Я добавил проверки для проверки уникальности, но все мои тесты вызывают «ActiveRecord :: RecordNotUnique: SQLite3 :: ConstraintException: ограничение UNIQUE не выполнено».
Вот мои миграционные файлы
class AddIndexToProduct < ActiveRecord::Migration[5.1]
def change
add_index :products, :name, unique: true
end
end
class CreateProducts < ActiveRecord::Migration[5.1]
def change
create_table :products do |t|
t.string :name
t.float :price
t.integer :inventory
t.timestamps
end
end
end
Вот мои проверки
validates :name, presence: true, length: {maximum: 15}, uniqueness: {case_sensitive: false}
validates :price, presence: true, length: {maximum: 15}
validates :price, presence: true, numericality: {only_float: true, greater_than: 0, less_than: 10000}
validates :inventory, presence: true, numericality: {only_integer: true, greater_than: 0, less_than: 10000}
Вот мои модельные тесты
def setup
@product = Product.new(name: "Bannana", price: 1.96, inventory: 3)
end
test "valid product" do
assert @product.valid?
end
test "products should be unique" do
duplicate_product = @product.dup
duplicate_product.name = @product.name.upcase
@product.save
assert_not duplicate_product.valid?
end
test "check if we can add a product with a negative price or zero" do
@product.price = -20
assert_not @product.valid?
@product.price = 0
assert_not @product.valid?
end
test "check if we can add a product without a name, price, or quantity" do
@product.name = " "
assert_not @product.valid?
@product.price = nil
assert_not @product.valid?
@product.inventory = nil
assert_not @product.valid?
end
test "check if name is too long" do
@product.name = "This name for a product is way too long for meeeee"
assert_not @product.valid?
end