2014-12-25 8 views
0

Ruby on Rails를 사용하고 있으며 프로모션 목적으로 데이터베이스 데이터를 사용하는 웹 페이지를 렌더링하고 싶습니다. 소스 코드는 다음과 같이 언급한다 :데이터베이스 데이터를 사용하는 홍보 콘텐츠를 처리하는 방법은 무엇입니까?

# Model 
PROMO_ID = 9 

# Controller 
@promo_article = Article.find(PROMO_ID) 

# View 
<%= @promo_article.title %> 
<%= @promo_article.content %> 

나는 "간단하게"데이터베이스 레코드 관련된 개체 인스턴스 (홍보 한)을 찾아 위의 코드에서를 다음 내가보기에서 렌더링합니다. 그러나 위의 코드를 사용하면 레코드 존재 여부를 확인해야합니다 (즉, idPROMO_ID으로 명시된 것과 같습니다). 그렇지 않으면 응용 프로그램에서 오류가 발생할 수 있습니다.

페이지를 작동 시키려면 개발 및 프로덕션 데이터베이스에 모두 레코드가 있어야하며 해당 참조 번호는 PROMO_ID 일 수 있습니다. 개발시에 위의 코드와 마찬가지로 9 일 수 있습니다. 생산시에는 378 일 수 있습니다.

모의 개체를 내 용도로 사용하려고했지만 "홍보"레코드를 사용자가 추가 처리 할 수 ​​있기 때문에 데이터베이스 레코드를 사용하고 싶습니다. 이 문제에 대한 균형 잡힌 린 솔루션을 찾고 있습니다.

당신은 무엇에 관해 조언합니까? 어떻게해야합니까? id 상수를 언급하거나 mock 객체를 사용해야합니까?

+0

이 질문을 전에 보았습니다. 그것을 명확하게하기 위해 질문을 편집하고, 그것을 다시 만들지 마십시오. 그리고 나는 여전히 "판촉 내용"의 정의를 얻지 못합니다. 어떤 논리를 따라야합니까? –

+0

오직 1 개의 기사 만 프로모션이 될 수 있습니까? 홍보 기사를 다른 기사로 변경할 수 있어야합니까? 그 이드를 어떻게 선택하셨습니까? –

+0

@ D-side - 논리적 인 점은 프로모션 목적은 사용자뿐만 아니라 판촉 목적으로도 사용되며 데이터베이스에 단 하나의 기사 레코드 만 갖고 싶다는 것입니다. – Backo

답변

0

간단한 사용 사례의 발현

case Rails.env 
    when "development" 
    PROMO_ID = 9 
    when "production" 
    PROMO_ID = 378 
end 
+0

예, 알고 있습니다. 하지만 몇 가지 근본적인 문제 (예 : 확실히 몇 가지 단점)가 있습니다 ... 솔루션 이외의 다른 솔루션에 대해서도 묻습니다. – Backo

1

시도 find보다 엄격한 것을 사용. 이 기록을 찾을 수없는 경우

# in model 
def self.december_promo 
    find_by(title: 'December 2014 Promo') } 
end 

# in controller 
@promo_article = Article.december_promo 

find_by는 nil이 될 것입니다.

+0

아마도'find_by (id : PROMO_ID)'가 더 좋을 것입니다 ... – Backo

+0

나는 보통 응용 프로그램 자체에 ID를 하드 코딩하는 것을 피하려고합니다. 프로덕션과 스테이징이 동기화되지 않으면 어떻게됩니까? 인간이 신분증을 가지고 놀아야한다면, [대리 신분증 열] (http://en.wikipedia.org/wiki/Surrogate_key)을 만드는 것을 고려해보십시오. 이 특정 기능이 아주 잘 제어된다면, ID는 아주 잘 할 수 있습니다. –