2009-02-04 28 views
25

Tôi đang đọc về đồ đạc Rails trong số guide này (cảm ơn, trevorturk). Có vẻ như bạn định nghĩa các lớp trong một tệp Yaml và chúng tự động được tải vào trong DB2 test.Rails fixtures - làm thế nào để bạn thiết lập các phím nước ngoài?

Nhưng nếu bạn muốn xác định rằng công thức này thuộc về sách dạy nấu ăn đó (hoặc bất kỳ thứ gì) thì bạn làm như thế nào?

Bạn có phải chỉ định các giá trị cho cookbook.idrecipe.cookbook_id bằng tay trong mã Yaml không? (Chỉ cần đoán - hướng dẫn không hiển thị bất cứ điều gì như thế.) Hoặc là có một cách phù hợp hơn?

Trả lời

53

Bạn nên sử dụng các đồ đạc có tên, tự động tạo số id cho bạn nơi bạn không cung cấp. Những số id này về cơ bản là số nguyên của bất kỳ chuỗi nào bạn sử dụng. Đừng thêm "_id" nếu bạn đang tham khảo các phiên bản tên:

# recipes.yml 
chicken_soup: 
    cookbook: my_recipes 

# cookbooks.yml 
my_recipes: 
    title: My Test Cookbook 
+0

Tất cả những điều đó thực sự hiệu quả. Cảm ơn, người đàn ông. – Ethan

+0

Wow, đó là đơn giản hơn nhiều so với tôi nghĩ rằng nó sẽ là :) Tôi đã cố gắng những thứ ngớ ngẩn như 'client_id: <% = contacts (: dave) .id%>' (mà rõ ràng là không hoạt động). – Skilldrick

+3

Nếu bạn có một ID được đặt tên khác với đối tượng (ví dụ my_cookbook_id), bạn có thể chỉ định lớp của đối tượng như sau: 'my_cookbook: my_recipes (Cookbook)' –

1

Ngoài ra, nếu bạn muốn có một nhiều để nhiều hiệp hội (HABTM), bạn chỉ cần cung cấp một mảng cho hiệp hội trong trận đấu :

# recipes.yml 
chicken_soup: 
    cookbooks: [my_recipes, another_recipe] 
Các vấn đề liên quan