2015-09-25 107 views
0

我得到了這個模型:FactoryGirl給我一個錯誤

rails g model Absence user:references company:references from:date to:date date:date category:integer hours:decimal remarks 

這也產生:

FactoryGirl.define do 
    factory :absence do 
    user nil 
    company nil 
    from nil 
    to nil 
    date nil 
    category 0 
    hours "8.00" 
    remarks "MyString" 
    end 
end 

我設置的,並日期到零,因爲它可以:從和還是有一定的日期。

當我嘗試這在我的規格:

@absence = create(:absence, user: @company.owner, from: "2015-09-10", to: "2015-09-10", hours: 4) 

我收到此錯誤信息:

NoMethodError: 
    undefined method `from=' for #<Absence:0x007f81f5494b88> 

出了什麼問題?

編輯: 當我從工廠/ absences.rb我得到它的下一個字段(到)去除

from nil 

和刪除之後我看到在類別中的錯誤信息。

EDIT2: 型號:

class Absence < ActiveRecord::Base 
    belongs_to :user 
    belongs_to :company 
    enum type: {holiday: 0, sick: 1} 
    validates :from, presence: true, if: '!user_id.nil?' 
    validates :to, presence: true, if: '!user_id.nil?' 
    validates :date, presence: true, if: '!company_id.nil?' 
    validates :hours, presence: true, if: '!user_id.nil?' 
    validates :hours, :numericality => { :greater_than_or_equal_to => 0 }, if: '!user_id.nil?' 
    validates :category, presence: true, if: '!user_id.nil?' 
    validates_numericality_of :company_id, allow_nil: true 
    validates_numericality_of :user_id, allow_nil: true 
    validate :company_xor_user 
    validate :to_date_after_from_date 
    validate :hours_smaller_than_workday 
    validate :non_overlapping 
    after_save :calculate_time_checks 
    after_destroy :calculate_time_checks_delete 

DB: https://www.evernote.com/shard/s29/sh/e8c1429d-9fa7-475b-87e8-3dc11a3f3978/08a7e7d6dfd80c6f407339cab97734c2

+0

如果你只是做'@absence =創建(:缺席,用戶:@ company.owner,到:「2015-09-10」,小時:4)'沒有'from',它工作嗎? – patrickh003

+0

你的模特是什麼樣的? –

+0

你可以發佈你的模型代碼嗎? –

回答

0

終於找到了真正的原因。

起初,我使用名爲'type'的屬性創建了Absence模型。這被遷移到開發和測試數據庫。之後,我將其更改爲類別,並添加了'from'和'to',並進行了回滾並再次遷移(但未在測試中!)。

通過在測試我做Absence.columns,發現區別使用撬

require 'pry'; binding.pry 

+0

你是對的,因爲它用於單表繼承(STI),所以你不應該在'ActiveRecord'中使用'type'列:http://benv.ca/2007/01/16/legacy-rails -beware-的型柱/。但是,如果在運行遷移後不運行'rake db:test:prepare',那麼可能會發生該錯誤。 – mrodrigues