Я следую учебному пособию Майкла Хартла по Rails (https://www.railstutorial.org/book/following_users#code-relationship_validations)) и пытаюсь понять, почему проходит тест, который, по моему мнению, не прошел.
У меня есть Relationship
модель. Это выглядит так:
class Relationship < ApplicationRecord
belongs_to :follower, class_name: "User"
belongs_to :followed, class_name: "User"
# validates :follower_id, presence: true
# validates :followed_id, presence: true
end
Я добавил следующий тест:
require 'test_helper'
class RelationshipTest < ActiveSupport::TestCase
def setup
@relationship = Relationship.new(follower_id: users(:michael).id,
followed_id: users(:archer).id)
end
test "should be valid" do
assert @relationship.valid?
end
test "should require a follower_id" do
@relationship.follower_id = nil
assert_not @relationship.valid?
end
test "should require a followed_id" do
@relationship.followed_id = nil
assert_not @relationship.valid?
end
end
Соответствующая часть в schema.rb
выглядит следующим образом:
create_table "relationships", force: :cascade do |t|
t.integer "follower_id"
t.integer "followed_id"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
t.index ["followed_id"], name: "index_relationships_on_followed_id"
t.index ["follower_id", "followed_id"], name: "index_relationships_on_follower_id_and_followed_id", unique: true
t.index ["follower_id"], name: "index_relationships_on_follower_id"
end
Несмотря на закомментированные проверки, тест все равно проходит. Насколько я понимаю, последние два утверждения должны потерпеть неудачу, так как нет никаких проверок, чтобы предотвратить установку любого столбца на ноль. Почему они проходят без проверок? Это потому, что в обоих столбцах есть индекс?