나는 하루 종일이 일로 싸웠습니다. 문제는 Fabrication 또는 FactoryGirl과 동일하므로 Active Record 또는 Rails와 관련이 있다고 생각합니다. Rails Factories association fail
은의 다음 코드를 보자 :# app/models/category.rb
class Category < ActiveRecord::Base
before_validation :set_order
# Associations ------------------
belongs_to :company
# Validations -------------------
validates :name, :order, :presence => true
validates :order, :uniqueness => { :scope => :company, :message => "order should be unique" }
def set_order
return unless self.order.nil? || self.order.blank?
company_categories = self.template && self.company.categories.template || self.company.categories.non_template
self.order = (company_categories.empty? && 1) || (company_categories.map(&:order).sort.last + 1)
end
end
# spec/factories/companies.rb
Fabricator :company do
Fabricate.sequence(:name) { |n| "Company #{n}" }
creation_date Date.today
template false
end
# spec/factories/categories.rb
Fabricator :category do
name ["Business", "Finance", "Analytics"][Random.rand(3)]
template false
company
end
# spec/models/category_spec.rb
require 'spec_helper'
describe Category do
let(:category) { Fabricate(:category) }
it "has a valid factory" do
category.should be_valid
end
end
내가 사양을 실행할 때마다, 나는 다음과 같은 오류가 발생합니다 :
협회가 제대로 설정되지 않은 것 같습니다1) Category has a valid factory
Failure/Error: let(:category) { Fabricate(:category) }
ActiveRecord::StatementInvalid:
PG::Error: ERROR: column categories.company does not exist
LINE 1: ..."categories" WHERE ("categories"."order" = 1 AND "categorie...
^
: SELECT 1 AS one FROM "categories" WHERE ("categories"."order" = 1 AND "categories"."company" IS NULL) LIMIT 1
# ./spec/models/category_spec.rb:4:in `block (2 levels) in <top (required)>'
# ./spec/models/category_spec.rb:7:in `block (2 levels) in <top (required)>'
. SQL 쿼리는 "categories", "company_id"가 아닌 "categories", "company"입니다. 그것은 아주 이상하다.
도움 주셔서 감사합니다.
당신은 내 하루를 보냈습니다! 정말 고마워! – karellm