0

我将 Feed 类型的对象作为 longblob 存储到我的 mysql 数据库中,并且想知道如何在不属于 String 类型的情况下检索它。

有没有办法在我忽略的 ruby​​/rails 中进行类型转换?

我假设这是发生的事情,因为我得到“未定义的方法`条目'#

一些背景,以防我做了一些愚蠢的事情......

我的迁移:

class AddFeedDataToFeeds < ActiveRecord::Migration
  def change
    add_column :feeds, :feed_data, :longblob
  end
end

class FillFeedData < ActiveRecord::Migration
  def up

    Feed.all.each do |f|
      f.update_attribute(:feed_data, Feedzirra::Feed.fetch_and_parse(f.feed_url))
    end

  end

在我的阅读器控制器中:

next_feed = Feed.find(session[:unread_random].pop)
    @feed = next_feed

在阅读器中:

<% unless @feed.is_a? Fixnum #protect against bad feed URLs: 404, 503 etc...
    @feed.entries.each do |entry| %>
    <div class="entry">
        <h1><%= entry.title %></h1>

等等... 错误出现在最后一个代码段的第二行。

4

1 回答 1

0

这是解决方案:

我意识到,当 Rails 将 Feedzirra AtomFeedBurner 或 RSSFeedBurner(或 Feedzirra 的任何解析器)存储到 longblob 列时,它会将其存储为文本而不是二进制。

我尝试了几件事,Base64 的 encode64 只接受字符串,所以没有用。

事实证明,您需要使用 Marshal.dump 和 Marshal.load 将对象序列化和反序列化到 blob 字段中/从 blob 字段中取出,以保护原始对象的完整性。

这对我来说现在很好。最终我确信我需要一个更优化的解决方案。

还发现要进行类型转换,您可以使用 .becomes() 但这不是一个好主意。

于 2012-08-14T21:56:28.740 回答