Следует ли Matcher не может найти иностранный идентификатор

У меня есть такой тест:

require 'rails_helper'

RSpec.describe User, :type => :model do
  it { should have_many(:assignments) }
  it { should have_many(:roles).through(:assignments) }
end

Который возвращает эту ошибку:

Failure/Error: it { should have_many(:assignments) }
       Expected User to have a has_many association called assignments (Assignment does not have a user_id foreign key.)

Однако моя схема выглядит так:

  create_table "assignments", force: true do |t|
    t.integer  "user_id"
    t.integer  "role_id"
    t.datetime "created_at"
    t.datetime "updated_at"
  end

Мои модели выглядят так:

user.rb

require 'role_model'
class User < ActiveRecord::Base
  # Include default devise modules. Others available are:
  # :confirmable, :lockable, :timeoutable and :omniauthable
  devise :database_authenticatable, :registerable,
    :recoverable, :rememberable, :trackable, :validatable
  validates :first_name, presence: true
  validates :last_name, presence: true
  validates :password, length: { minimum: 8 }

  include RoleModel
  roles_attribute :roles_mask
  roles :admin, :super_admin, :user
  has_many :assignments
  has_many :roles, :through => :assignments 

end

здесь assignment.rb

class Assignment < ActiveRecord::Base
  belongs_to :user
  belongs_to :role
end

Есть идеи, что я здесь делаю не так?

2 ответа

Решение

Я ничего не изменил, и ошибка просто ушла через день. Я предполагаю, что что-то немного не синхронизировалось, но теперь все в порядке.

Попробуйте выполнить миграцию с помощью более стандартных "ссылок" (а не только целых):

create_table "assignments", force: true do |t|
  t.references  "user", index: true
  t.integer  "role_id"
  t.datetime "created_at"
  t.datetime "updated_at"
end

Или вы в два-три раза уверены, что вы выполнили свои миграции? Иногда вам нужно запускать их и для ваших тестов (если вы запускаете отдельную спецификацию rspec, а не запускаете их все с использованием rake). если сомневаешься: rake db:test:prepare

Другие вопросы по тегам