Bonjour à tous,
Voilà j’ai un petit problème avec des paramètres serialisés, j’ai un
champ cty_settings de type text dans ma BDD,
dans mon model j’ai :
serialize :cty_settings
et dans mon formulaire :
<%= f.check_box ‘cty_settings[:new_question]’ %>
<%= f.check_box ‘cty_settings[:answer_question]’ %>
<%= f.check_box ‘cty_settings[:classified]’ %>
<%= f.check_box ‘cty_settings[:news]’ %>
<%= f.check_box ‘cty_settings[:bi]’ %>
et voilà les erreurs que je me prend :
undefined method `cty_settings[:new_question]’ for #<User:
0x106c5a470>
On line #240 of app/views/users/_user_form.rhtml
240: <%= f.check_box
‘cty_settings[:new_question]’ %>
alors qu’en console j’ai ça :
user = User.find(19070)
la fin de la réponse :
cty_settings:
{:bi=>1, :new_question=>1, :answer_question=>1, :news=>1,
:classified=>1}
et
user.cty_settings[:new_question]
=> 1
Pour info dans le champ cty_settings, j’ai :
new_question: 1
answer_question: 1
news: 1
classified: 1
bi: 1
On 7 sep, 13:27, chollier [email protected] wrote:
undefined method `cty_settings[:new_question]’ for #<User:
0x106c5a470>
Bonjour Loïc,
Il te faut utiliser le helper “check_box_tag” :
<%= check_box_tag ‘cty_settings[new_question]’, … %>
Note : ça oblige à gérer soi-même la valeur et l’état
coché/décoché,d’où les pointillés.
–
Julien Vignolles
Hello 
Merci j’arrive maintenant à afficher ma vue mais au moment des
modifications ça bloque, j’ai pourtant :
Processing UsersController#update (for 127.0.0.1 at 2009-09-07
16:28:28) [PUT]
Parameters: {… , “cty_settings”=>{“answer_question”=>“1”,
“bi”=>“0”, “new_question”=>“0”, “news”=>“0”,
“classified”=>“1”}, …}
mais ça ne me change rien dans la BDD
Ok en écrivant une réponse je viens de me rendre compte de mon erreur,
il me manquait user[ dans l’attribut name du tag 
Salut,j’ai souvent cette problématique de sauvegarder des préférences en
sérialisé dans la base pour éviter d’avoir 50 colonnes. J’ai essayé de
voir
si on pouvait pas faire une serialisation plus “propre” avec un
fields_for
dans la vue.
Finalement avec un Hash cela ne fonctionne pas correctement (si
quelqu’un a
une solution avec un Hash, qu’il le dise :))
J’ai testé avec une OpenStruct et ça marche impec et ça me semble très
propre. Au final j’ai :
post.rb
class Post < ActiveRecord::Base
serialize :preferences, OpenStruct
def after_initialize
self.preferences ||= OpenStruct.new
end
def preferences=(preferences)
write_attribute(:preferences, OpenStruct.new(preferences))
end
end
environment.rb
require “ostruct”
_form.html.haml
- form.fields_for :preferences do |pref_attributes|
%label Draft
= pref_attributes.check_box :draft
…
Nicolas.
Le 7 septembre 2009 16:57, chollier [email protected] a écrit :