में पैरा के साथ किसी अन्य विशेषता से कॉल विशेषता का पता लगाएं मेरे पास एक काफी चंचल फैक्ट्री गर्ल विशेषता है जो पैरा को स्वीकार करती है और एक has_many संबंध बनाता है। मैं लक्षणों को सूखने के लिए किसी अन्य विशेषता के हिस्से के रूप में उस विशेषता को कॉल कर सकता हूं या कारखानों में उन्हें पारित करते समय एक साथ गुणों को बंडल करना आसान बनाता हूं। मुझे नहीं पता कि कैसे करना है, जब मैं इसे किसी अन्य विशेषता से बुला रहा हूं, या इसके बजाय क्या करना है, तो एक विशेषता के लिए पैरा को कैसे पास किया जाए।फैक्ट्री_girl
उदा
FactoryGirl.define do
factory :currency do
name Forgery::Currency.description
sequence(:short_name) { |sn| "#{Forgery::Currency.code}#{sn}" }
symbol '$'
end
factory :price do
full_price { 6000 }
discount_price { 3000 }
currency
subscription
end
sequence(:base_name) { |sn| "subscription_#{sn}" }
factory :product do
name { generate(:base_name) }
type { "reading" }
duration { 14 }
trait :reading do
type { "reading subscription" }
end
trait :maths do
type { "maths subscription" }
end
trait :six_month do
name { "six_month_" + generate(:base_name) }
duration { 183 }
end
trait :twelve_month do
name { "twelve_month_" + generate(:base_name) }
duration { 365 }
end
factory :six_month_reading, traits: [:six_month, :reading]
factory :twelve_month_reading, traits: [:twelve_month, :reading]
trait :with_price do
transient do
full_price 6000
discount_price 3000
short_name 'AUD'
end
after(:create) do |product, evaluator|
currency = Currency.find_by(short_name: evaluator.short_name) ||
create(:currency, short_name: evaluator.short_name)
create_list(
:price,
1,
product: product,
currency: currency,
full_price: evaluator.full_price,
discount_price: evaluator.discount_price
)
end
end
trait :with_aud_price do
with_price
end
trait :with_usd_price do
with_price short_name: 'USD'
end
end
end
create(:product, :with_aud_price) # works
create(:product, :with_usd_price) # fails "NoMethodError: undefined method `with_price=' for #<Subscription:0x007f9b4f3abf50>"
# What I really want to do
factory :postage, parent: :product do
with_aud_price full_price: 795
with_usd_price full_price 700
end
मुझे वास्तव में समझ में नहीं आता कि यह क्यों काम करता है, लेकिन मुझे बहुत खुशी है कि यह करता है। – jim
अनुमान में यह हूड कॉलिंग विशेषता ए के तहत प्रतीत होता है ए विशेषता के भीतर बी विशेषता गुण बी का एक उप-वर्ग बनाता है जो दर्शाता है कि यह एकाधिक विरासत का समर्थन करता है और कौन जानता है कि क्या होता है यदि आपके दोनों गुण समान क्षणिक गुण आदि को परिभाषित करते हैं। अनुमान लगाएं कि पहले या आखिरी व्यक्ति को केवल प्राथमिकता दी जाती है। कारखानों के लिए इस्तेमाल किए गए 'पैरेंट:: foo' वाक्यविन्यास जैसे कुछ के बजाय एक विधि कॉल की तरह विरासत को परिभाषित करने के लिए थोड़ा आश्चर्यजनक लगता है। – jim
ठीक है। इसे आगे देखो, यह तब तक अच्छा है जब तक यह जाता है, लेकिन मैं अभी भी ओपी में कोड नमूने के बहुत नीचे उदाहरण नहीं कर सकता। अगर मैं इस फॉर्म में कोशिश करता हूं तो मुझे 'फैक्टरीगर्ल :: विशेषता वितरण परिभाषा मिलती है: विशेषता पहले ही परिभाषित है: full_price'। हम्म ... मैं इसे क्षणिक गुणों के लिए सरणी के साथ काम करने में सक्षम हो सकता हूं। – jim