在续集

时间:2015-09-24 03:42:42

标签: ruby minitest sequel

我试图在teardown方法&中删除我刚刚在测试中添加的一行(minitest)。它失败并显示表没有主键的消息。以下是其迁移:

Sequel.migration do
  up do
    create_table :hobbies_users do
      Integer :user_id
      Integer :hobby_id

      unique [:user_id, :hobby_id]
    end
  end

  down do
    drop_table :hobbies_users
  end
end

我该怎么办?不使用主键是不好的做法吗?

测试代码,我发现了问题:

require_relative '../../test_helper.rb'
require 'api/models/users_hobbies'

class UsersHobbiesTest < Minitest::Test
  def setup
    @uh = UsersHobbies
      .new(user_id: User.all.sample.id, hobby_id: Hobby.last.id * 10)
      .save
  end

  def test_accessors
    assert_kind_of User, @uh.user
  end

  def teardown
    @uh.destroy
  end
end

2 个答案:

答案 0 :(得分:1)

目前您可以在模型中定义主键:

self.primary_key = :some_column

但是我觉得有必要在每个表中都有主键,因为最近我遇到了一种情况,当我有一个没有主键的关联表时,我需要通过删除db条目来破坏关联,这是由于没有主键(在我的情况下是MySQL),不可能。

答案 1 :(得分:0)

哟可以这样做

@record_to_erase = DB["DELETE FROM hobbies_users"]
@record_to_erase.delete