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

Что может быть не так?

Edit: Когда я удалить

from nil 

из заводов/absences.rb я получаю его на следующее поле (к) и после удаления, что я вижу сообщение об ошибке на категории ,

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 = create (: отсутствие, пользователь: @ company.owner, to:" 2015-09-10 ", часы: 4)' без 'from', это работает? – patrickh003

+0

Как выглядит ваша модель? –

+0

Можете ли вы опубликовать свой код модели? –

ответ

0

НАКОНЕЦ нашел истинную причину.

Сначала у меня была модель отсутствия, созданная с атрибутом с именем «тип». Это было перенесено в базу данных разработки и тестирования. Впоследствии я изменил его на категорию и добавил «от» и «до», а затем откат и снова перенесен (но не на тест!).

С помощью Поддеть

require 'pry'; binding.pry 

в тесте я сделал Absence.columns и заметил разницу.

+0

Вы правы в том, что вы не должны использовать столбец 'type' с' ActiveRecord', так как он используется для однонаправленного наследования (STI): http://benv.ca/2007/01/16/legacy-rails -beware-типа из-столбцов /. Однако эта ошибка может произойти, если вы не запускаете 'rake db: test: prepare' после выполнения миграции. – mrodrigues

Смежные вопросы