tutorial rails factorybot create bot association ruby-on-rails serialization rspec factory-bot

ruby-on-rails - rails - factorybot gem



Chica de fábrica con campo serializado (1)

En su fábrica, no debe configurar el cache al valor serializado, sino al valor real.

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

Tengo este problema con una chica de la fábrica donde me da un undefined method ''each'' for #<String:0x0000012915bc18> error undefined method ''each'' for #<String:0x0000012915bc18> con un campo serializado que viene de fábrica.

dentro de ActiveRecord, ejecuta cada uno sin problemas, ya que el objeto devuelto es una matriz.

Mi pregunta es: ¿cómo debo formatear el objeto serializado en mi fábrica? La forma en que el registro activo lo devuelve? o la forma en que se almacena realmente en la base de datos? (es decir, serializado o no?) ¿Rspec hará la misma serialización mágica al guardar y recuperar ese registro activo?

esta es una versión simplificada de lo que estoy haciendo:

Tvdb.rb-- Modelo

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

Entonces en mi modelo de Series.rb puedo hacer esto:

class Series < ActiveRecord::Base def episodes episodes = Tvdb.episodes(self.tvdb_id) episodes.each do |episode| puts episode.name end end end

Tvdb.rb - Fábrica

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

nota: la sintaxis del valor de caché puede no ser válida aquí, traté de acortar lo que era un objeto serializado muy largo. El punto es que funciona en mi modelo, pero no en rspec

y en mi * series_spec.rb * llamando a esto:

series.episodes.count.should_not == 0

da ese error

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