web-dev-qa-db-fra.com

comment sauvegarder un tableau dans une base de données dans des rails

si j'ai des params comme ça:

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

et quand je crée un objet dans le champ de base de données state_id pas enregistrer dans la base de données? 

comment sauvegarder en base de données au format:

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

comment ça

merci avant

18
tardjo

ActiveRecord :: Base.serialize .

Par exemple: 

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"] }
17
Rubyist

Vous pouvez également utiliser le support PostgreSQL pour le stockage de tableaux. (Si vous utilisez PG, bien sûr) . Votre migration ressemblera à ceci:

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

Mais n'oubliez pas les validations.

23
cnnr

Dans votre modèle ont

serialize :state_ids

Voici un link à la documentation

Cela étant dit, il semblerait que vous essayiez de passer les paramètres state_ids et de le sauvegarder dans state_id, est-ce ce que vous avez l'intention de faire?

2
j-dexx
state_ids != state_id

vous avez 2 noms différents pour votre attribut, ils ne s'alignent donc pas . utilisez ensuite serialize :state_ids une fois que vous avez renommé la colonne.

Cependant, si vous stockez une liste de state_ids, je suppose que vous avez également une table d'etats et que vous devriez donc examiner l'utilisation de has_and_belongs_to_many association.

0
TomDunning