2011-01-16 3 views
2

지난 주에 두 번 나왔습니다. 실종 된 모범 사례 또는 가이드 라인이 있어야하는 것처럼 느껴 왔습니다. 우리는 API를 구축하고자하는 레일즈 애플리케이션을 보유하고 있습니다. 우리는 표준 일 수행하여 시작 :Rails API -보기를 API 응답으로 바꾸기

... 
respond_to :json 

def show 
    @post = Post.find(params[:id]) 
    respond_with @post 
end 
... 

그래서 우아하지만, 다시 현실 세계로 ... 주요 사이트에 우리의 전망은 복사/메시지를 표시하기위한 조건부 논리의 일부 금액이를 그 API의 소비자 에 대한 액세스를 원한다. 합리적인 요구 사항 인 것처럼 보입니다. 소모적 인 (iPhone) 응용 프로그램에서 사본을 하드 코딩하지 않으려는 경우가 드물기 때문에 발행주기가 짧아지기 때문에 메시지를 업데이트 할 수 있습니다. 다음은 몇 가지보기 코드의 작성된 예입니다.

<% if @post.profanity_detected? %> 
    This post is under review and it'll go live within <%= @post.review_period %> days. Blah blah additional copy... 
<% else %> 
    Your post for <%= @post.title %> looks great... 
<% end %> 

이러한 유형의 요구 사항을 어떻게 처리합니까?

1) @ post.profanity_message_text에 적절한 메시지를 반환하는 모델에 메소드를 추가 할 수 있습니다. API 모델을 직렬화 할 때 메소드를 포함 할 수 있습니다. 그러나 어떤 경우에는 모델에 속한 것처럼 느껴지지 않는 훌륭한 양의 복사본이 있습니다.

2) 모든 메시징이 포함 된 json 응답을 빌드하는 show.json.erb 파일을 추가 할 수 있지만 코드 양이 많아지면서 지루한 느낌이들 것 같습니다.

누구나 패턴을 접하게되어 정말 행복합니까?

제안 해 주셔서 감사합니다.

답변

1

메시지 저장 방법은 config/locale/en.yml입니까? interpolations

en: 
    post: 
    accepted: "Your post for %{title} looks great..." 
    reviewed: "This post is under review and it'll go live within %{review_period} days." 

사용법 :

I18n.t "post.accepted", :title => @post.title 
I18n.t "post.reviewed", :review_period => @post.review_period 
+0

그래,이 꽤 좋다. 모델에 메소드를 추가하거나 show.json.erb를 작성하는 방식으로 잘 작동합니다. 또한 모델에서 as_json을 재정 의하여 as_json (: methods => [: blah], : translation_keys => [ 'post.notice', 'post.terms_of_use']와 같은 i18n 키를 수락 할 수 있습니다. 감사! – njorden