2011-03-31 3 views
0

에서 설정/초기화/, 나는 내 기본 "자동차"데이터베이스에서 인스턴스의 ID를로드 한 루비 파일이 있습니다. 따라서 응용 프로그램을 시작한 후 응용 프로그램에서이 기본 ID를 직접 사용할 수 있습니다.Rails 3 애플리케이션에서 이러한 충돌 상황을 제거하는 방법은 무엇입니까?

하지만는, 나는 데이터베이스 자동차 테이블에 기본 차를 저장하는 레이크 (씨앗) 작업 또는 다른 데이터베이스 마이그레이션 중 하나가 필요 databasae에이 기본 차를 삽입 먼저 필요하므로 .

여기에 이 오게됩니다. CONFLICT! 내가 레이크 작업이나 데이터베이스 인스턴스를 삽입 할 마이그레이션을 실행하면 아무것도 실행하기 전에 초기화 파일은 항상은 "/가 설정/초기화"의 전무 ID를 얻을 것이다 아래에 루비 파일을 의미하는 첫째을 실행됩니다 디폴트 카는 이 아니고,이 데이터베이스에 저장되어 있기 때문에 디폴트 카가됩니다.

그래서이 충돌을 없애려면 어떻게해야합니까? (이니셜 라이저 파일은 기본 자동차 ID 만 ONCE 만로드하는 목적입니다.) 기본 자동차 ID를 한 번만로드 할 수있는 다른 방법이 있습니까?

------------- 초기화에서 편집 ----------

코드 :

default_car=Car.where({:name => DEFAULT_CAR_NAME}) 
def default_car_id 
    return {:default_car_id=>default_car.id} 
end 
+0

사용하는 코드를 붙여 넣을 수 있습니까? – Ant

+0

내 이니셜 라이저 코드를 추가하고 업데이트 된 게시물을 확인하십시오. – Mellon

+0

당신은 어디서나하는 대신에 이니셜 라이저에서 자동차를 만들 수 있습니다,하지만 이것은 좀 지저분 해 보입니다. 언제 어떻게 default_car_id를 호출합니까? – Ant

답변

0

나는하지 않을 것 그것은 그것을 좋아한다 - 그것은 상당히 혼란하게 보인다. 나는 당신의 자동차 모델 같은 것을 할 것입니다, 그래서 하나의 데이터베이스 쿼리는 매우 비싼되지 않습니다 :

class Car < ActiveRecord::Base 

    def self.default_car 
    @default_car ||= Car.where(:name => DEFAULT_CAR_NAME) 
    @default_car 
    end 

end 

이 될 것 경우 아마 YAML 설정 파일에 DEFAULT_CAR_NAME을 넣어 좋은 생각을 수 있을까요 전혀 바뀌지 않았다. 그렇지 않으면 나는 단지 그것을 하드 코딩 할 것이다.

관련 문제