我将一个Feed类型的对象存储到我的mysql数据库中作为longblob,并想知道如何检索它而不是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>
...等 错误抛出最后一个代码段的第二行。
答案 0 :(得分:0)
以下是解决方案:
我意识到当Rails将Feedzirra AtomFeedBurner或RSSFeedBurner(或任何Feedzirra的解析器)存储到longblob列中时,它将其存储为文本而不是二进制文件。
我尝试了几件事,Base64的encode64只接受字符串,因此不起作用。
事实证明,您需要使用Marshal.dump和Marshal.load将对象序列化和反序列化为blob字段,以保护原始对象的完整性。
这对我来说现在很好。最后,我确信我需要一个更优化的解决方案。
还发现,对于类型转换,你可以使用.becomes()但这不是一个好主意。