2009-04-18 30 views
18

Như được mô tả trong this article, tôi đang sử dụng các liên kết tự động trong các đồ đạc. Ví dụ: nếu đối tượng vùng có id quốc gia, thay vì thực hiện "country_id": 1, tôi thực hiện "country": "USA". "USA" là nhãn trong tệp countries.yml của tôi, vì vậy đồ đạc biết cách xử lý vấn đề này. Tuy nhiên, điều này chỉ hoạt động khi bạn không chỉ định giá trị ID cho đối tượng quốc gia. Vì vậy, tôi không thể chỉ định ID của Hoa Kỳ là 1. Nhưng nếu tôi không chỉ định nó là 1, nó kết thúc lên được một số giá trị lớn 8974343 ... đó là kinda lạ. Có cách nào để có được đồ đạc để tự động tạo id không phải là siêu cao? .... hay là ok?Các liên kết tự động trong các thiết bị ruby ​​trên đường ray

Trả lời

21

Đọc tài liệu API, đây chính xác là cách các thiết bị được tạo tự động hoạt động - nếu bạn muốn có một giá trị ID cụ thể cho lịch thi đấu, bạn có thể chỉ cần gán nó cho chính mình.

Nếu không, tốt, từ các tài liệu API:

The generated ID for a given label is constant, so we can discover any fixture‘s ID without loading anything, as long as we know the label. 
+0

Tại sao bạn nghĩ mọi người chấp nhận câu trả lời nhưng không bỏ phiếu cho họ? –

3

id của trận đấu đến trực tiếp từ băm tên của nó (đó là cách "chúng ta có thể khám phá ID của bất kỳ trận đấu mà không cần tải bất cứ điều gì, miễn là chúng ta biết nhãn ")

23

Đây là cách bạn nhận được id được tạo tự động của nhãn lịch thi đấu.

Fixtures.identify(:reginald) 
+11

Vì bài viết SO này đã giúp tôi rất nhiều, tôi muốn cung cấp bản cập nhật cho Rails 4.1.0.rc1: <% = ActiveRecord :: FixtureSet.identify (: reginald)%> – Chris

+0

Tôi đã bao gồm Lớp mà nhãn được đề cập đến. http://ruby-journal.com/rails/define-fixtures-with-polymorphic-association/ – Shadoath

1

kiểm tra tự động để thực thi tính toàn vẹn của lịch thi đấu

class FixtureIntegrityTest < ActiveSupport::TestCase 
    context "fixture integrity" do 
     should "work" do 
     fixtures = Dir["test/fixtures/*.yml"].map do |file| 
      [file, File.basename(file).sub(/\..*/, "").singularize, YAML.load(ERB.new(File.read(file)).result)] 
     end 

     failures = fixtures.reject(&:last).map { |file,*| "#{file} is empty!"} 

     failures = failures.presence || fixtures.map do |_, klass, content| 
      content.select{ |_,fixture| fixture["id"] }.map do |name, _| 
      fixtures.map do |file, _, content| 
       content.select { |_,fixture| fixture[klass] == name }.map do |_, fixture| 
       "#{file} uses #{klass}: #{name}, but should use the id!" 
       end 
      end 
      end 
     end.flatten.compact 

     assert_equal [], failures 
     end 
    end 
    end 
Các vấn đề liên quan