2014-04-28 17 views
14

yılında veritabanına diziyi kurtarmak için ben böyle params varsa:nasıl raylar

params["scholarship"] = {"name"=>"test", "state_ids"=>["1", "2", "3", "4"]} 

ve ben veritabanı alanına nesne oluşturmak zaman veritabanına kaydetmek değil state_id?

nasıl formatı ile veritabanına kaydetmek için:

#<Scholarship id: 1, name: "test", state_id: "["1", "2", "3", "4"]"> 

nasıl bunu? senin modelde

cevap

14

ActiveRecord::Base.serialize. Örneğin

:

class User < ActiveRecord::Base 
    serialize :scholarship 
end 

user = User.create(:scholarship=> { "name" => "test", "state_ids" => ["1", "2"]}) 
User.find(user.id).scholarship# => { "name" => "test", "state_ids" => ["1", "2"] } 
+1

there.You soruyla comment.Stick orada tepki vermiş olmalıdır düzeltilir – Stefan

+0

Ya state_ids', teşekkürler – Rubyist

+0

sayesinde hata ... typo Hoşgeldiniz .... @ tardjo – tardjo

2

İşte

serialize :state_ids 

Eğer state_ids parametrelerini geçirmek ve bunu kurtarmaya çalışıyoruz gibi görünüyor söyleniyor belgelerinde

bir link olduğunu var önce

teşekkürler state_id, yapmak istediğin şey bu mu?

0
state_ids != state_id 

Özniteliğiniz için 2 farklı adınız vardır, bu nedenle sıraya girmezler. sonra sütunu yeniden adlandırdıktan sonra serialize :state_ids kullanın.

Bununla birlikte, bir state_ids listesi saklıyorsanız, bir de durum tablonuz olduğunu tahmin edeceğim ve bu nedenle has_and_belongs_to_many ilişkisini kullanmaya dikkat etmeliyim.

+0

: ' –

16

Ayrıca dizi depolamak için PostrgreSQL destek kullanabilir. (Tabiki PG kullanıyorsan).

add_column :table_name, :column_name, :string, array: true, default: [] 

Ama validasyonları hakkında unutma: Sizin göç böyle bakacağız.

Bu zaten Sen diziler için çoğul formu kullanmalıdır