2015-01-02 7 views
3

데이터베이스에서 변수를 가져 오려는 초기화 프로그램이 있습니다. 이 초기화는 앱을 rails server 또는 프로덕션에서 실행하는 경우에만 필요하며보기에서만 사용됩니다.초기화 도구를 작성하여 데이터베이스가 올바르게 설정되어있을 때만 실행하는 방법은 무엇입니까?

config.default_country_id = Spree::Country.find_by(name: 'Netherlands').try(:id) 

(db:setup 그것을 만들려고한다) 값이 존재하지 않는 반입되고있는 테이블 때문에, 빈 데이터베이스 (또는 레이크 작업) 실패에 rake db:setup를 실행.

ActiveRecord::StatementInvalid: Mysql2::Error: Table 'revitalised_staging.spree_countries' doesn't exist:... 

대신 이러한 초기화 프로그램을 작성해야합니까? 데이터베이스가 올바르게 설정되어 있지 않으면 건너 뛸 수있는 일반적인 조건으로 포장 할 수 있습니까? 대신 필자는 필 요한 것을 알 때 (즉, 몇 가지 명령이나 모드를 허용 목록에 포함) 실행해야합니까?

답변

1

당신은 테이블이 존재하는지 여부 액티브을 요청하고 않는 경우에만 옵션을 설정할 수 있습니다. 나는 당신이 일종의 대체를 추가 할 수 있다고 생각하지만 값이 뷰에서만 사용되기 때문에 걱정하지 않을 것입니다.

0
config.default_country_id = Spree::Country.find_by(name: 'Netherlands').try(:id) if defined?(Spree::Country) 

참조 :-) 트릭을 수행해야합니다 https://www.ruby-forum.com/topic/171753

+0

AFAIK,'defined (Spree :: Country)'는 상수가 정의되어 있으면 테이블이 존재하는지 여부에 관계없이 "true-ish"값을 반환합니다. – berkes