2013-07-15 3 views
0

내 사이트에 대해 두 개의 환경을 설정하려고합니다. 하나는 개발 서버이고 다른 하나는 실제 서버 환경입니다. 그리고 각 서버에서 DB의 어떤 레코드를 볼 수 있는지 지정하고 싶습니다. 내 포함에 파일을 만들었습니다. 개발을 위해이 파일은 @show = "dev"이고 라이브 파일은 @show = "live"입니다.이 파일은 모든 응용 프로그램 레이아웃의 상단에 포함되어 있으므로 모든 페이지에 있습니다. 다만 명시 적으로 사용하거나이를 무시,레일에서 열 이름으로 변수 사용하기

- f = Event.find(:all, :conditions => ["#{@show} = 1"]) 

를하지만 변수 인 것으로 @show을 선택하지 않습니다 그리고 내보기에, 각 데이터베이스 호출로 나는 다음과 같은 몇 가지 조건을 넣어합니다. 이 작업을 수행하는 간단한 방법이 있습니까, 아니면 예상대로 작동하지 않습니까? 내가 관리했습니다

업데이트가 작동하도록,하지만 난 오히려 단지 응용 프로그램 레이아웃보다 각 개인보기에서 파일을 포함 할 필요가 ... 이상적하지만이 솔루션입니다 :

= render "includes/dev_live" 

- f = Event.find(:all, :conditions => {@show => 1}) 
+0

각 환경에 대한 데이터베이스는 무엇입니까? –

+0

전 두 가지 복사본이 있기를 원하지 않습니다. 이전에 모든 것이 동기화되지 않았기 때문입니다. – user1738017

+0

SQL 삽입의 가능성으로 인해 쿼리 내에서 텍스트 대체를 사용하는 것은 다소 당황 스럽습니다. 나는 @show의 가치가 악의적 인 사용자에 의해 변경 될 것 같지는 않다고 생각합니다. 조건에 해시 양식을 사용하는 것이 좋습니다. (아래 두 답변과 같이) – Slicedpan

답변

1

기호는 다음 액티브 레코드 쿼리가 될 수

@show = :dev 
@show = :live 

을 즉 : 별도의 D를 필요에서 당신을 방해하는 어떤

f = Event.find(:all, :conditions => {@show => 1}) 
0

변수를 인스턴스 변수로 변환해야합니다. 조건에서 그것을 사용하기 위해.

당신이

F = Event.find 시도 할 수 있습니다 (: 모두 : 조건 => {@show.to_sym => 1}) 나는 당신이 당신의 변수를 변경 나을 것이라고 생각

관련 문제