2011-01-16 7 views
2

これは私のための最後の週に数回に来ていると私は欠けているいくつかのベストプラクティスやガイドラインが存在しなければならないように私は感じてきました。私たちにはAPIをビルドしたいRailsアプリケーションがあります。我々は、標準的な事やっによって開始: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にメッセージを保存するのはどうですか?

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

interpolationsと使用方法:

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

うん、これはかなり良いです。モデル上にメソッドを追加する方法とshow.json.erbを作成する方法のどちらでもうまくいきます。 as_json(:メソッド=> [:何とか]、:translation_keys => [ 'post.notice'、 'post.terms_of_use'])また、次のような国際化キーを受け入れるようにモデルにas_json上書きすることができます。ありがとう! – njorden

関連する問題