J'ai un modèle Rails nommé Container
avec une colonne nommée products
. Il s'agit d'un tableau de chaînes tel que supporté par Postgres et la gemme 'postgres_ext'.
La partie pertinente de la GEMFILE est :
gem 'rails', '3.2.9'
gem 'pg'
gem 'postgres_ext'
gem 'activerecord-postgres-hstore', git: 'git://github.com/engageis/activerecord-postgres-hstore.git'
La partie pertinente de la migration est :
t.string :products, array: true
J'écris une méthode publique dans mon Container
qui ajoute des produits à ce tableau. La méthode ressemble à ceci :
attr_accessible :products
def add_to_products(product)
if products.blank? || products.size == 0 ## product array is either uninstantiated or blank
products = [product.id]
else
unless products.include? product.id
products << product.id
end
end
end
Voici les résultats dans irb/console :
pry(main)> c = Container.first
=> #<Container id: "2765cc19-98f8-4e42-a1be-538788424ec7", name:....
pry(main)> p = Product.first
=> #<Product id: "319a25ae-87fe-4769-a9de-1a8e0db9e84f", name: ....
pry(main)> c.add_to_products(product)
pry(main)> c.products
=> nil
pry(main)> c.products= [] << "319a25ae-87fe-4769-a9de-1a8e0db9e84f"
pry(main)> c.products
=> ["319a25ae-87fe-4769-a9de-1a8e0db9e84f"]
Je me gratte la tête pour comprendre ce qui ne va pas dans le add_to_products
méthode. Quelqu'un peut-il m'éclairer sur cette situation étrange ? Pourquoi la valeur n'est-elle pas définie lorsque je la fais passer par cette méthode ?