2012-02-16 24 views
18

Tôi chỉ tự hỏi liệu có thể tạo ra một thuộc tính được gọi là "bí danh" bằng cách sử dụng FactoryGirl, vì bí danh là một từ dành riêng trong Ruby.Làm thế nào để sử dụng FactoryGirl để tạo ra một thuộc tính được gọi là "bí danh"?

FactoryGirl.define do 
    factory :blah do 
    name "dummy" 
    alias "dummy" 
    end 
end 

Tôi đã thử kết hợp nhiều thứ khác nhau nhưng không thể làm việc gì hữu ích.

Trả lời

27

Ruby không biết bạn đang cố gắng gọi một phương thức có tên là alias hoặc bí danh một phương thức như một phương thức khác và mặc định là phương thức thứ hai. Bạn có thể phân biệt bằng cách thực hiện

self.alias "dummy" 

tức là, bằng cách chỉ định rõ người nhận. Đây thường là cách để đi trong các trường hợp khác, nơi nó không rõ ràng cho dù bạn đang gọi một phương pháp hoặc làm điều gì đó khác, ví dụ:

self.foo = 'bar' 

để gọi phương thức foo= thay vì tạo biến cục bộ được gọi là foo.

Đối với một small number of field names điều này sẽ không hoạt động. DSL của nhà máy nữ sử dụng method_missing vì vậy nếu đối tượng DSL có một phương thức của tên đó, nó sẽ được gọi thay thế. Trong những trường hợp bạn có thể làm những gì các đường DSL bình thường làm cho bạn và gọi add_attribute trực tiếp:

FactoryGirl.define do 
    factory :blah do 
    add_attribute :name, "some value" 
    end 
end 

cũng giống như

FactoryGirl.define do 
    factory :blah do 
    name "some value" 
    end 
end 
+1

Sử dụng 'self.alias'. Tôi đã tích cực tôi đã thử mặc dù vậy. (-: Thanks! –

+3

Chỉ có vấn đề này, nơi mô hình của tôi có một thuộc tính được gọi là "end". 'Self.end' làm cho nó hoạt động. – GMA

+2

Chết tiệt, điều này không làm việc cho các trường có tên' phương thức'. –

0

Định nghĩa một biến cho factory .. do khối và gọi các phương pháp trên đó.

FactoryGirl.define do 
    factory :blah do |f| 
    f.name "dummy" 
    f.alias "dummy" 
    end 
end 
Các vấn đề liên quan