2012-05-04 2 views
0

Вот трюк. У меня есть модель под названием «Страницы» с полем «page_type», который может быть одним из трех вариантов: «html», «image», «vcard» и поле «content». Так что теперь мне нужно приложение, чтобы отвечать на разные типы mimetypes в зависимости от того, какой тип страницы запрашивается.Rails 3 ответный тип и тип контента

Если для параметра page_type установлено значение «html» - отображение содержимого в виде html с использованием соответствующего вида и html_safe, это легко.

Если для параметра page_type установлено значение «изображение» - получите изображение, используя путь, сохраненный в содержимом, и отправьте его пользователю, как если бы он запросил изображение.

То же самое для "vcard".

Как я могу это сделать?

ответ

1

Если вы создаете URL-адреса для доступа к своим ресурсам (странице) в своем приложении, вы можете указать местоположение ресурса RESTfully, например /pages/2.jpg, /pages/3.vcard,/pages/4 (по умолчанию html), используя встроенные помощники вида Rails, такие как page_url (@page,: format => 'jpg'). Тогда это просто вопрос использования repond_to в Rails для доставки ресурса:

respond_to do |format| 
    format.html { # default rendering in show.erb.html } 
    format.jpg { # perhaps send_file or send_data call } 
    format.vcard { # send attachment } 
end 

Отъезд Rails Routing Guides для получения дополнительной информации. Вам необходимо настроить Rails для обработки запросов на .vcard. См. this gist.

Если вы не контролируете создание ссылок (внешние ссылки на свои ресурсы) и ожидаете получить запросы типа/pages/2 (это jpeg), вам придется вернуться к использованию столбца page_type для условно визуализировать с помощью send_file, send_data или других методов рендеринга Rails. Вы можете рассмотреть возможность повторного использования логики (методов), которую вы создаете для каждого блока в response_to выше, чтобы у вашего контроллера были методы «response_to_html», «reply_to_jpg», «reply_to_vcard».

Смежные вопросы