2009-04-18 2 views
18

this article에 설명 된대로 조명기에서 자동 연결을 사용하고 있습니다. 예를 들어, region 객체에 "country_id"를 수행하는 대신 국가 ID가있는 경우 : 1, "country": "USA"를 수행합니다. "USA"는 내 countries.yml 파일의 레이블이므로 조명기는 이것을 처리하는 방법을 알고 있습니다. 그러나 국가 개체에 대한 ID 값을 지정하지 않은 경우에만 작동합니다. 그래서 저는 미국의 ID를 1로 지정할 수 없습니다.하지만 제가 1로 지정하지 않으면, 어떤 큰 값인 8974343이됩니다 ... 다소 이상합니다. 최고가 아닌 ID를 자동으로 생성하는 비품을 얻을 수있는 방법이 있습니까? .... 아니면이게 괜찮습니까?ruby ​​on rails fixtures의 자동 연결

답변

21

API 문서를 읽는 것은 자동 생성 된 조명기가 작동하는 방식입니다. 사전에 조명기에 대한 특정 ID 값을 지정하려는 경우 직접 지정해야합니다.

그렇지 않으면, 음, 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

사람들이 왜 대답을 수락하지만 투표하지 않았다고 생각하십니까? –

3
치구의 ID가 이름을 (해시에서 직접 제공

그것은 우리가 우리만큼 아무것도로드하지 않고 어떤 고정의 ID를 발견 할 수있는 방법 "이다 라벨을 알아라. ")

23

이것은 조명기 라벨의 자동 생성 된 ID를 얻는 방법입니다. 나는 의견을 충분히 명성을 가지고 있지 않기 때문에

Fixtures.identify(:reginald) 
+11

이 SO 기사가 나에게 많은 도움이 되었기 때문에 Rails 4.1.0.rc1에 대한 업데이트를 제공하고 싶습니다. <% = ActiveRecord :: FixtureSet.identify (: reginald) %> – Chris

+0

언급 된 라벨. http://ruby-journal.com/rails/define-fixtures-with-polymorphic-association/ – Shadoath

1

자동화 된 테스트에 설비 무결성 유지

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