Rails AtomFeedBuilder Entry: опция URL отображается в теге url, но не в теге link - PullRequest
8 голосов
/ 01 апреля 2010

Я использую AtomFeedHelper, и все работает нормально, за исключением одного фида, где мне нужно связать каждую запись с URL, который не является polymorphic_url по умолчанию для записи.

В документации я указал опцию: url для записи. Это правильно отображает тег <url> в узле атома, но <link rel="alternate" по-прежнему указывает на polymorphic_url по умолчанию. Глядя на источник и документацию, я не понимаю, почему это происходит.

Вот пример строителя:

atom_feed do |feed|
  feed.title("Reports")
  feed.updated(@reports.first.created_at)
  for report in @reports
    content = report.notes

    feed.entry(report) do |entry|
      entry.title(report.title)
      entry.content(content, :type => 'html')
      entry.url("http://myhost/page/")
      entry.updated(report.updated_at.strftime("%Y-%m-%dT%H:%M:%SZ"))
      entry.author do |author|
        author.name(report.user.username)
      end
    end
  end

end

Вот пример проблемного узла:

 <entry>
    <id>tag:myhost.mydomain.com,2005:SiteReport/2</id>
    <published>2010-03-30T13:11:07-07:00</published>
    <updated>2010-03-30T13:11:07-07:00</updated>
    <link rel="alternate" type="text/html" href="http://myhost/site_reports/2"/>
    <title>Test Title</title>
    <content type="html">Test Content</content>
    <url>http://myhost/page/</url>
    <updated>2010-03-30T13:11:07Z</updated>
    <author>
      <name>Author</name>
    </author>
  </entry>

Я хочу, чтобы значение href в теге ссылки совпадало со значением в теге url, но это не так.

Когда я смотрю на источник, указанный для записи здесь http://api.rubyonrails.org/classes/ActionView/Helpers/AtomFeedHelper/AtomFeedBuilder.html

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

 @xml.link(:rel => 'alternate', :type => 'text/html', :href => options[:url] || @view.polymorphic_url(record))

Confused. Кто-нибудь сталкивался с этим раньше?

Спасибо всем!

1 Ответ

18 голосов
/ 16 августа 2010

Я сделал это, передав опцию: url непосредственно методу feed.entry:

feed.entry(report, :url => report_url(report.slug)) do |entry|

...