2012-10-07 9 views
9

Trong một nhà máy, làm cách nào để tôi tham chiếu đến giá trị của một trong các trường khác trong đối tượng đang được tạo?trong factorygirl, bất kỳ cách nào để tham chiếu đến giá trị của trường1 khi khởi tạo field2?

Giả sử mô hình Widget của tôi có hai lĩnh vực, nicknamefullname

Bên trong nhà máy của tôi, tôi muốn sử dụng Faker tạo ra một nickname ngẫu nhiên khác nhau mỗi lần một nhà máy được tạo ra. (Cuối cùng đã tìm ra tôi phải sử dụng trình tự (: biệt danh), nếu không tên giống nhau cho tất cả các nhà máy.)

Để làm cho một số xác nhận dễ dàng hơn để kiểm tra, tôi muốn tạo một tên đầy đủ dựa trên biệt hiệu, một cái gì đó như fullname = "Full name for #{nickname}"

FactoryGirl.define do 
    factory :widget do 
    sequence(:nickname) { |n| Faker::Lorem.words(2).join(' ') } 
    sequence(:fullname) { |n| "Full name for " + ????? } 
    end 
end 

Bất cứ điều gì tôi đặt ở đâu ??? đi, tôi nhận được #<FactoryGirl::Decl... thay vì bất kỳ tên hiệu nào được đặt thành.

Tôi đã thử tên, name.to_s, name.value ... dường như không có gì hoạt động.

Trả lời

12

Có. Dưới đây là một ví dụ từ Factory Girl Getting Started doc:

factory :user do 
    first_name "Joe" 
    last_name "Blow" 
    email { "#{first_name}.#{last_name}@example.com".downcase } 
end 

FactoryGirl.create(:user, last_name: "Doe").email 
# => "[email protected]" 

Ngoài ra, tôi thường xác định trình tự của tôi riêng biệt, trong config/application.rb:

FactoryGirl.define do 
    sequence(:random_string) { |s| ('a'..'z').to_a.shuffle[0, 30].join } 
end 

Bạn có thể hưởng lợi từ làm như vậy. Sau đó, bạn có thể có thể làm một cái gì đó như:

FactoryGirl.define do 
    factory :widget do 
    nickname generate(:name_faker) # assuming you had defined a :name_faker sequence 
    fullname generate("Full name for #{nickname}") 
    end 
end 
+0

Đó là điều đầu tiên tôi thử trong mã mẫu của tôi trong câu hỏi, nhưng thay vì # {field1} cho giá trị của trường, nó mang lại một số đối tượng # jpwynn

+0

Được rồi, tôi đã bỏ lỡ điều đó. Kiểm tra câu trả lời cập nhật của tôi. –

+0

lừa gọn gàng, tôi sẽ cung cấp cho một thử nhờ !! – jpwynn