У меня есть модель, которая использует как ассоциацию, так и атрибут enum.Factory Girl с перечислением и ассоциацией
class ProjectItem < ActiveRecord::Base
belongs_to :project
enum status: {open: 0, pending: 1, completed: 2}
Когда я бегу тест на создании действия модели с ассоциацией, я использую build(:model_name).attributes
так:
it "creates a new ProjectItem" do
expect {
post :create, document_project_item: build(:project_item).attributes
}.to change(ProjectItem, :count).by(1)
end
Это не работает, и я нашел this issue thread that explains why it doesn't work. Основываясь на комментарии, я смог определить, что на таблицах с атрибутом enum
, но нет связи, все работает с attributes_for(:model_name)
, как и ожидалось.
Проблема, похоже, не предлагает работу, хотя я признаю, что не понимаю, что 100% того, что делают методы FactoryGirl за кулисами. Вот завод:
factory :project_item do
project
name { Faker::Company.bs }
description { Faker::Lorem.paragraph }
status :open
due { Faker::Date.between(2.days.ago, 10.days.from_now) }
sequence(:position) {|n| n }
completed_at { Faker::Date.between(1.year.ago, Date.today) }
end
Я попытался положить целое в status
, как хорошо, но я получаю ту же ошибку:
Failure/Error: post :create, project_item: build(:project_item).attributes
ArgumentError:
'0' is not a valid status
Вы проинспектировали значение статуса в ответе атрибутов_имя или построить (что-то). Атрибуты? Кроме того, попробуйте использовать 'pending' вместо' open' и посмотрите, не получите ли вы ту же ошибку с '1' вместо' 0'. – Humza
Когда я запускаю 'attributes_for' из консоли, я получаю:' {...: status =>: open, ...} ', но он не создает связанный с ним проект. Когда я запускаю 'build (: project_item) .attributes', я получаю:' {... "project_id" => 24, ... "status" => 0, ...} '. Если я изменю «статус» на «ожидающий» или ': pending', он действительно даст мне ту же ошибку с 1 вместо 0. Похоже, что с Rails перечислениями я не смогу строить формы интуитивным способом (с целым числом для значения и строкой для метки), поэтому может быть, что перечисления не собираются облегчать мою жизнь на данный момент. – Shaun