测试失败:关联 ID 应该是强制性的

Test fails: association id should be mandatory

我有以下集成测试:

def setup
  @file = fixture_file_upload('test/fixtures/rails.jpg')
  @user = users(:one)
  @image = @user.build_image(image_file: @file)
end

test "should be valid" do
  assert @image.valid?
end

test "image_file should be present" do
  @image.image_file = "     "
  assert_not @image.valid?
end

test "user_id should be present" do
  @image.user_id = "     "
  assert_not @image.valid?
end

最后的集成测试失败了——也就是说,@image 是有效的——我不明白。鉴于下面的迁移文件,user_id 不是必须的吗?

def change
  create_table :images do |t|
    t.references :user, index: true, foreign_key: true
    t.string :image_file, null: false

    t.timestamps null: false
  end
end

.valid? 只检查您的模型验证,而不是模式验证。您需要做的是在图像模型中也添加验证

class Image < ActiveRecord::Base
  validates :user, presence: true
end

加上您可能想要使用的任何其他验证。