2011-11-26 101 views
2

我遇到了這個問題與工廠女孩,它給了我一個undefined method 'each' for #<String:0x0000012915bc18>錯誤與來自工廠的序列化字段。工廠女孩與序列化字段

在ActiveRecord中,它運行每個沒有問題,因爲返回的對象是一個數組。

我的問題是:我應該如何格式化序列化的對象在我的工廠?活動記錄返回的方式?或者它實際存儲在數據庫中的方式? (即序列化或不?)rspec將保存和檢索該活動記錄做相同的序列化魔術?

這是我在做什麼的簡化版本:

Tvdb.rb--型號

class Tvdb < ActiveRecord::Base 

    set_table_name 'tvdb' 
    serialize :cache 

    def self.episodes(id) 
    cached = self.find_by_term('episodes_' + id.to_s) 
    return cached.cache unless cached.nil? 

    info = self.series_info(id) 
    request = info.episodes 

    Tvdb.create(:term=>'episodes_' + info.id.to_s, :cache=>request) 
    return request 
    end 
end 

然後在我的Series.rb模式,我可以這樣做:

class Series < ActiveRecord::Base 

    def episodes 
    episodes = Tvdb.episodes(self.tvdb_id) 
    episodes.each do |episode| 
     puts episode.name 
    end 
    end 

end 

Tvdb.rb - 工廠

FactoryGirl.define do 
    factory :series1_episodes, :class=>Tvdb do 
    term 'episodes_79488' 
    cache %q([#<AnObject::Module:0x000001290a4568 @value="dsada"]>,#<AnObject::Module:0x0002321290a4568 @value="dsadsada"]>) 
    end 
end 

注:緩存值的語法可能在這裏無效,我試圖縮短什麼是一個很長的序列化對象。問題的關鍵是,它在我的模型,但不能在rspec的

,並在我的* series_spec.rb *調用此:

series.episodes.count.should_not == 0 

給出了錯誤

undefined method 'each' for #<String:0x0000012915bc18> 

回答

5

在你的工廠,則不應將cache設置爲序列化的值,而應設置爲實際值。

FactoryGirl.define do 
    factory :series1_episodes, :class => Tvdb do 
    term 'episodes_79488' 
    cache ["foo", "bar"] 
    end 
end