0

나는 하루 종일이 일로 싸웠습니다. 문제는 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"입니다. 그것은 아주 이상하다.

도움 주셔서 감사합니다.

답변

1

주문 유효성 검사를 실행하려고합니다. 범위가 company이고 company_id 대신 company이되는 곳입니다. 시도 :

validates :order, :uniqueness => { :scope => :company_id } 
+0

당신은 내 하루를 보냈습니다! 정말 고마워! – karellm

0

db 아직 준비가되지 않았습니다. 실행

rake db:migrate 
rake db:test:prepare 
+0

여기에 문제가 없지만 이미 실행했습니다. – karellm