2014-04-28 9 views
14

jeśli mam params tak:jak zapisać tablicy do bazy danych w szynach

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

i kiedy utworzyć obiektu do pola bazy danych nie state_id zapisać do bazy danych?

jak zapisać do bazy danych w formacie:

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

jak to zrobić?

dzięki przed

Odpowiedz

14

ActiveRecord::Base.serialize.

Na przykład:

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

Należy użyć liczby mnogiej dla tablic: 'state_ids' – Stefan

+0

Ya, dzięki typo błąd ... – Rubyist

+0

dziękuje @Rubyist – tardjo

2

W modelu mają

serialize :state_ids 

Oto link do dokumentacji

tym mówi to wygląda starasz się przekazać parametry state_ids i zapisać go w state_id, czy to właśnie zamierzasz zrobić?

0
state_ids != state_id 

Masz 2 różne nazwy dla swojego atrybutu, więc nie są wyrównane. następnie użyj serialize :state_ids po zmianie nazwy kolumny.

Jednak jeśli przechowujesz listę identyfikatorów stanów, to zgaduję, że masz także tabelę stanów, więc warto przyjrzeć się użyciu skojarzenia has_and_belongs_to_many.

+0

to już poprawione powinny zareagowały there.You tam w comment.Stick z pytaniem –

16

Również można użyć wsparcia PostrgreSQL na tablicy przechowywania. (Jeśli używasz PG oczywiście). migracji będzie wyglądać tak:

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

Ale nie zapomnij o walidacji.

Powiązane problemy