Рассмотрим следующие настройки модельнуюКак передать атрибуты ассоциации через черту в factorygirl?
class Template < ActiveRecord::Base
belongs_to :detail, polymorphic: true, dependent: :destroy
accepts_nested_attributes_for :detail
end
class EbayTitleTemplate < ActiveRecord::Base
has_one :template, as: :detail
end
А вот действующий завод
FactoryGirl.define do
factory :template do
merchant
channel
trait :ebay_title do
association :detail, factory: :template_ebay_title
end
factory :ebay_title_template, traits: [:ebay_title]
end
factory :template_ebay_title, class: EbayTitleTemplate do
name "eBay Title Template"
title "Super Cool Hat"
sub_title "Keeps the sun away"
description "The best hat available!"
end
end
Следующие работы для меня
create(:ebay_title_template) # creates both records, creating a new Merchant and Channel for me
create(:ebay_title_template, merchant: Merchant.first, channel: Channel.first) # creates both records with explicit channel and merchant
Теперь то, что я хотел бы также сделать, это пропуск в пользовательских атрибутах для переопределения значений по умолчанию. Что-то вроде этого:
create(:ebay_title_template, title: "Overwrite the title", sub_title: "Overwrite the subtitle")
Что в итоге происходит то, что я получаю ошибку ArgumentError: Trait not registered: title
Как-то FactoryGirl думает, что я передаю в черте или шаблон завод не распознает title
как атрибут.
Я попытался с помощью переходных процессов, чтобы пользовательские арг пройти через шаблон и с помощью обратного вызова в :template_ebay_title
завода, чтобы отобразить атрибут в столбце модели следующим образом:
transient do
custom_args nil
end
after(:create) do |record, evaluator|
evaluator.custom_args.each do |key, value|
record.key = value
end
end
А потом я создаю как это:
create(:ebay_title_template, custom_args: {title: "Overwrite", sub_title: "Overwrite"})
Это приводит к ошибке NoMethodError: undefined method
custom_args' для # `
Так как есть способ д o это, и я делаю это неправильно, или мне нужен совершенно новый подход. Имейте в виду, что будут десятки ассоциаций, которые нужно будет определить как черты (или что-то еще), поэтому я не могу назначить конкретные переходные процессы.
Как я могу достичь своей цели создания фабрики, которая создает родительскую и полиморфную связь, позволяя мне передавать произвольные атрибуты для полиморфной ассоциации и возвращать родительский объект?
какая версия FactoryGirl вы используете? По-видимому, до 5.0 вам нужно использовать 'ignore' вместо' transient' - source: [неопределенные методы для переменных переходных процессов factorygirl] (http://stackoverflow.com/questions/25510268/undefined-methods-for-factorygirl-transient -переменные) – David
Я использую factory_girl_rails 4.5. Я попробовал «игнорировать» вместо «переходного» и получил ту же ошибку. – cheeseandpepper