У меня возникла проблема с заводской девушкой, где она дает мне ошибку 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>