2009-06-25 6 views
0

플렉스에서 프런트 엔드를 사용하여 특정 시나리오를 테스트하기 위해보다 복잡한 테스트 데이터를 추가하기 위해 조명기를 사용하려고합니다. 나는 이것이 레일에 관해서 올바른 방법이라고 확신하지 못합니다. 내 레일 앱은 카드 게임이며 테스트하려는 '복잡한 테스트 데이터'는 다양한 카드 조합입니다.왜이 ERB 코드가 '정의되지 않은 메소드'를 던지는 조명기에 있습니까?

예를 들어, 플레이어 1이 카드 B와 C를 가지고있는 테스트 게임을 설정하고 싶습니다. 플레이어 B는 카드 B와 C를 플레이어의 손에 특별히 추가했습니다.

플레이어, 게임 및 사용자를위한 기본 설비가 있습니다. 잠시 동안 잘 작동하고 있습니다. 나는 Game.start 메소드를 호출, 게임기구에 다음 ERB 코드를 추가하려고했습니다, 및 고정 코드는

NoMethodError: undefined method `games' for main:Object 

무엇입니까 :

four: 
    id: 4 
    num_players: 3 
    turn_num: 0 
    status_id: 1 

<% game_four = games(:four).find 
    game_four.start 
%> 
+0

몇 가지 답변을 한 후에도 '루비가 아닌'일을하고 있음이 분명합니다. '새로운 개발 환경에서 데이터를 설정하는 데 레일을 어떻게 사용할 수 있습니까?하지만 레일 테스트를 수행 할 수는 없습니까?'와 같은 새로운 질문이 필요하다고 생각합니다.' – user26270

+0

당신이 바꾸어 놓은 질문은 테이블에서 기본 데이터를 설정할 수있는 마이그레이션에 가장 잘 응답하는 것처럼 보입니다. 이러한 경우 다른 사람이 ActiveRecord 객체에서 인스턴스화하고 호출하는 것이 아니라 데이터를 설정하는 데 명시 적으로 "start"메소드의 작업을 수행하기 위해 마이그레이션을 읽는 것이 명확한 이유가 바람직합니다. – animal

+0

테스트하지 않으면 Rails 방식으로 작업하지 않습니다. ;) 그럼에도 불구하고 귀하의 대답은 아마도 여기에 있습니다 http://ryandaigle.com/articles/2009/5/13/what-s-new-in-edge-rails-database-seeding –

답변

5
game_four = games(:four).find 

게임 메소드는 테스트 케이스에만 존재하고 조명기에는 존재하지 않는다. 데이터베이스를 쿼리하거나 관계를 사용해야합니다. 이것은 단지 예입니다.

four: 
    id: 4 
    num_players: 3 
    turn_num: 0 
    status_id: 1 

<% Game.find_by_name(four).start %> 

또한이 명령은 실제로 적절한 장소가 아닙니다. 비품은 "게임을 시작"하기위한 것이 아닙니다. 설치 블록 내의 전용 테스트 케이스에서이 명령을 다른 위치로 옮겨야합니다.

편집

: 여기에 복사 내 댓글이 기능은 시드 새로운 레일 데이터베이스에 대한 링크가 원래의 대답에 전에 며칠을 게시

: http://ryandaigle.com/articles/2009/5/13/what-s-new-in-edge-rails-database-seeding

이 예후에 의해 설명 하나입니다 Katz의 대답과이 문제를 해결하는 가장 좋은 방법입니다.

+0

find_by_name을 시도했지만 'name'속성이 없으므로 대신 < % Game.find (4) .start %> 그리고 ID = 4 인 게임을 찾을 수 없다고 말합니다. – user26270

+0

find_by_name은 (는) 예입니다. 게임에 적절한 식별자를 사용해야합니다. ID는 레일스에서 ​​고유하게 생성되며 예상 한대로 항목 번호를 콜렉션에 반영하지 않으므로 사용할 수 없습니다. –

4

아마도 가장 좋은 해결책은 (그리고 실제로 가장자리에서 캐 노니 화 된) 가장 좋은 해결책은 rake 작업에서로드하는 db 디렉토리에 seeds.rb 파일을 저장하는 것입니다.

다음은 레일스가 (레일 3에있을 때) 가장자리에있는 것입니다. (당신이 당신의 Rakefile에 추가 할 수있는) 새로운 레이크 작업 후

# db/seeds.rb 
# This file should contain all the record creation needed to seed the database with its default values. 
# The data can then be loaded with the rake db:seed (or created alongside the db with db:setup). 
# 
# Examples: 
# 
# cities = City.create([{ :name => 'Chicago' }, { :name => 'Copenhagen' }]) 
# Major.create(:name => 'Daley', :city => cities.first) 

그리고

가 :

desc 'Load the seed data from db/seeds.rb' 
task :seed => :environment do 
    seed_file = File.join(Rails.root, 'db', 'seeds.rb') 
    load(seed_file) if File.exist?(seed_file) 
end 

당신이 당신의 seeds.rb 파일이 방법을 설정 한 경우, 새 규칙을 다음되며 당신은 또한

3. 레일을 업그레이드 할 때 씨앗 레이크 작업을 삭제할 수 있습니다, 마이그레이션 데이터 하지이다. 내가 아는 한 이것은 잘 정립되어 있으며 Rails 핵심 팀의 보편적 인 견해입니다.

+0

게시물을 보내 주셔서 감사합니다. 나는 weppos에 대한 답을주었습니다. 왜냐하면 그것은 그 게시물의 특정 질문에 대답했기 때문입니다; 그러나 당신의 대답은 내가하려고하는 것의 더 큰 그림과 현재의 레일 규칙에서 그것을하는 방법에 매우 도움이된다. – user26270

0

조명기 방법을 사용하려는 경우 (테스트 동안이 아닌 개발 용 데이터를로드 할 때) fixtures_references 플러그인을 사용할 수 있습니다. 그것의 행동은 동일 할 것이다.