2014-04-28 7 views
14

Array-Datenbank zu speichern, wenn ich habe params wie folgt aus:wie in Schienen

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

und wenn i-Objekt-Datenbankfeld erstellen state_id nicht zur Datenbank speichern?

, wie Datenbank mit Format speichern:

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

wie das tun?

Dank vor

Antwort

14

ActiveRecord::Base.serialize.

Zum Beispiel:

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

Sie die Pluralform für Arrays verwendet werden soll: 'state_ids' – Stefan

+0

Ya dank Typo Fehler ... – Rubyist

+0

dankt Ihnen @Rubyist – tardjo

2

In Ihrem Modell haben

serialize :state_ids 

hier ein link in der Dokumentation ist

Dass gesagt wird es sieht aus wie Sie state_ids Parameter sind versucht, und es passieren speichern in state_id, ist das was du vorhast?

0
state_ids != state_id 

Sie haben 2 verschiedene Namen für Ihr Attribut, so dass sie nicht in einer Linie stehen. dann verwenden Sie serialize :state_ids, sobald Sie die Spalte umbenannt haben.

Wenn Sie jedoch eine Liste von state_ids speichern, werde ich raten, dass Sie auch eine states-Tabelle haben, und daher sollten Sie sich mit der has_and_belongs_to_many Assoziation beschäftigen.

+0

Dies ist bereits korrigiert there.You im comment.Stick die Frage geantwortet hat es sollte –

16

Sie können auch PostrgreSQL verwenden Unterstützung für Array zu speichern. (Wenn Sie PG natürlich verwenden). Ihre Migration wird so aussehen:

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

Aber vergessen Sie nicht über Validierungen.