0

Feed 型のオブジェクトを mysql db に longblob として格納していますが、String 型でなくてもそれを取得する方法を知りたいです。

私が見落としているルビー/レールで型キャストする方法はありますか?

「未定義のメソッド「エントリ」を #

私が愚かなことをした場合に備えて、いくつかの背景...

私の移行:

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>

など...この最後のコードセグメントの2行目にエラーがスローされます。

4

1 に答える 1

0

解決策は次のとおりです。

Rails が Feedzirra AtomFeedBurner または RSSFeedBurner (または Feedzirra のパーサーのいずれか) を longblob 列に格納するとき、バイナリではなくテキストとして格納していることに気付きました。

私はいくつかのことを試しました.Base64のencode64は文字列のみを受け入れるため、機能しませんでした.

元のオブジェクトの整合性を保護するために、Marshal.dump と Marshal.load を使用して、オブジェクトを blob フィールドとの間でシリアル化および逆シリアル化する必要があることがわかりました。

これは今のところうまくいきます。最終的には、より最適化されたソリューションが必要になると確信しています。

また、型キャストするには .becomes() を使用できることもわかりましたが、それは良い考えではありません。

于 2012-08-14T21:56:28.740 に答える