Rails API - превращение представлений в ответы API - PullRequest
2 голосов
/ 16 января 2011

Это прозвучало для меня пару раз за последнюю неделю, и я чувствовал, что должны быть какие-то лучшие практики или рекомендации, которые мне не хватает. У нас есть приложение Rails, для которого мы хотели бы создать 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) Я могу добавить файл show.json.erb, который формирует ответ json со всеми включенными сообщениями, но кажется, что в итоге он продублирует большое количество кода и будет довольно утомительным.

Кто-нибудь сталкивался с моделью, которой он действительно доволен?

Спасибо за предложения!

1 Ответ

1 голос
/ 16 января 2011

Как насчет хранения сообщений в 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."

Использование с интерполяциями :

I18n.t "post.accepted", :title => @post.title
I18n.t "post.reviewed", :review_period => @post.review_period
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...