2015-09-25 71 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