2012-01-25 12 views
5

Rails benim SQLite veritabanına diziler dizisi devam çalışıyorum.Bir diziyi Ruby on Rails'deki veritabanına nasıl kalıcı olarak devam edebilirim?

Şu anda, böyle bir Array tutabilir bir nesne var ve örnekler hiçbir sorunla kaydetmek görünür. Ancak, açık bir şekilde veritabanına devam edilmiyor - My_Object.array işlevini dizinin oluşturulduğu görünümden farklı görünümlerde çağırdığımda, nil çıkıyor ve çalışmıyor. Örneğin

:

class My_Object < ActiveRecord::Base 
    attr_accessor :array 
end 

Ben My_Object.new(:array => [ [1, 2, 3], [4, 5, 6] ]), her şey düzgün çalışması için görünür diyoruz, ama başka bir yerde :array özelliğine erişemez

, sadece nil çıkıyor.

Herhangi bir fikrin var mı?

cevap

12

İlk Tablonuzdaki array adında bir metin sütun oluşturun. Sonra serialize kullanın: otomatik dizinizde veritabanından geri çektiğinde açmaktır otomatik YAML kullanarak ve seri hale getirilmeye

class My_Object < ActiveRecord::Base 
    serialize :array 
end 

.

Gerçi tasarımınızı yeniden gözden geçirilmesi gerektiğini. Veritabanındaki serileştirilmiş verilerle hiçbir şey yapamazsınız, özellikle de sorgularda kullanamazsınız. YAML sadece veritabanına giren ve geri gelen bir opak blob olacak, veritabanı bununla herhangi bir şey yapamayacak. Eğer, veritabanı sonra devam edin ve serialize kullanmak array içine bakmak gerekir asla eminseniz aksi takdirde dizi veri depolamak için ekstra tablolar kurmak isteyeceksiniz.

+0

Gerçek uygulama bu diziyi neredeyse özel olarak kullanacak ... Sadece bir dizi oyununu kullanarak bir dizi oyununu kullanarak raylar uygulamasına geçmeye çalışıyorum. Bu dizi temelde tüm uygulamada kullanılacak, bütün nokta yeni noktaları elde etmek için algoritma üzerinden çalıştırmaktır. Bu 'serialize' kullanarak mümkün mü? Tüm programı tekrar çalıştırmalı mıyım? –

+1

@Benjamin: 'serialize' böyle bir şey için iyi olmalı. –

+3

Sadece küçük bir nokta: Eğer bir Array uygulamak istiyorsanız diziyi, Array': Sen 'serialize kullanabilirsiniz. – Swanand