Как добавить изображения в ленту атомов в Rails 3.2?

В приложении Rails 3.2 у меня есть модель Photo с полем :caption и использование Carrierwave для обработки файлов изображений.

Я пытаюсь создать канал атома, содержащий изображения. Каков правильный способ сделать это?

В настоящее время у меня есть

#views/photos/index.atom.builder
atom_feed do |feed|
  feed.title "Photos"
  @photos.each do |photo|
      feed.entry photo do |entry|
        entry.title photo.title
        entry.summary photo.caption
        entry.image image_path(photo.file.url(:large))
        entry.author do |author|
          author.name photo.user.name
        end
      end
    end
end

и хотя это добавляет тег изображения к разметке канала, я думаю, что это может быть неправильный синтаксис?

<entry>
   ...
   <image>http://path/to/image.jpg</image> 
   ...
</entry>

В другом месте, где я видел следующий синтаксис

<entry>
    <content type="image/jpg" src="/path/to/image.png" />
</entry>

Я был бы признателен, если бы кто-то с большим знанием мог сказать мне:

  1. Какова правильная разметка для включения изображений в ленту атомов?
  2. Как сгенерировать эту разметку с помощью построителя атома/xml в Rails?

person Andy Harvey    schedule 29.07.2012    source источник
comment
Вы нашли решение этой проблемы?   -  person Holger Sindbaek    schedule 17.08.2012
comment
Привет, Хольгер, я нашел ответ. Но в конце концов я решил использовать RSS-канал вместо Atom — это очень специфично для моего использования, так как мне нужно было манипулировать каналом для другой цели. Навскидку я не могу вспомнить, что я делал с Atom, но я точно знаю, что разработал синтаксис для отображения изображения в строке (тег img) или в виде вложения. Я использовал ленту Flickr в качестве эталона для структуры. Дайте мне знать, как у вас дела, и я могу покопаться в своем коде завтра, если вы ничего не добьетесь.   -  person Andy Harvey    schedule 19.08.2012
comment
Спасибо за ответ. Я также нашел решение. Перешел на RSS-канал и вставил изображение в качестве тега изображения в описание. Немного хитрый метод, но работает.   -  person Holger Sindbaek    schedule 20.08.2012
comment
Если это поможет, вы можете добавить изображения в свою ленту в виде вложений/вложений следующим образом: xml.media :content, url: image_model.file.url(:fullpage), type:"image/jpeg", height:770, width:770 или xml.media :thumbnail, url: image_model.file.url(:thumb), height: 50, width:50. (Я использую несущую волну, вам может потребоваться по-другому построить пути к изображениям. Я не уверен, применяются ли/какие ограничения к высоте и ширине). Вам также может понадобиться добавить некоторые атрибуты в начало ленты, например "xmlns:media" => "http://search.yahoo.com/mrss/".   -  person Andy Harvey    schedule 21.08.2012


Ответы (1)


Я нашел ответ на свой вопрос.

Для каналов Atom изображение может быть добавлено к содержимому в тегах img.

В качестве альтернативы он может быть добавлен в качестве корпуса:

feed.entry photo do |entry|
    entry.link href: photo.file.url(:large), rel:"enclosure", type:"image/jpeg" 
end

В конце концов я переключился с Atom на RSS-канал (это особенность моего использования, так как мне нужно было манипулировать каналом позже, и мне было проще сделать это с помощью RSS).

Опять же, изображения могут быть добавлены в RSS в тегах контента как img.

Или могут быть добавлены в качестве вложений:

@photos.each do |photo|
    xml.item do
        xml.media :content, url: photo.file.url(:fullpage), type:"image/jpeg", height:770, width:770
        xml.media :thumbnail, url: photo.file.url(:thumb), height: 50, width:50
    end
end

Для создания подобных RSS-каналов может потребоваться добавить некоторые атрибуты в заголовок RSS-канала.

Мой выглядит так

xml.instruct! :xml, version: "1.0" 
xml.rss version: "2.0", "xmlns:media" => "http://search.yahoo.com/mrss/", "xmlns:atom" => "http://www.w3.org/2005/Atom" do
...
person Andy Harvey    schedule 21.08.2012
comment
Я попытался добавить изображение в контент для фидов Atom следующим образом: entry.content ‹img src=#{resource.image.url(:medium)} width='280', height='180'›.html_safe, :type =› 'html', но он не отображает теги html, есть идеи? - person chell; 04.01.2013
comment
что рендерится если поставить entry.content "<img src='http://twitter.com/images/resources/twitter-bird-light-bgs.png'/>", :type => "html" - person Andy Harvey; 04.01.2013
comment
‹content type=html›img src='twitter .com/images/resources/twitter-bird-light-bgs.png'/ - person chell; 04.01.2013
comment
что вы видите в исходном сообщении?` entry.content ‹img src=#{resource.image.url(:medium)} width='280', height='180'›.html_safe, :type =› 'html ' ` - person Andy Harvey; 04.01.2013
comment
Та же проблема: теги ‹img не отображаются как html. - person chell; 05.01.2013
comment
если проблема заключается в экранированных тегах html, вы можете попробовать использовать что-то вроде entry.content image_tag(resource.image.url(:medium)).html_safe, :type => 'html'. Я не могу проверить это в настоящее время, поэтому дайте мне знать, что вы видите - person Andy Harvey; 05.01.2013
comment
‹content type=html›img alt=Medium height=180 src=s3 .amazonaws.com/agile_designer_uploads/images/789/ width=280 /‹/content› - person chell; 05.01.2013
comment
понял, что мой контент не был действительным каналом атома. Как только я смог проверить это, это сработало - person chell; 05.01.2013