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 :
>
> 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 ;)
>
>
> On 7 sep, 16:32, chollier <[email protected]> wrote:
> > 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
> >
> > On 7 sep, 15:01, Meshak <[email protected]> wrote:
> >
> >
> >
> > > On 7 sep, 13:27, chollier <[email protected]> wrote:
> >
> > > > et dans mon formulaire :
> >
> > > > <%= f.check_box 'cty_settings[:new_question]' %><br />
> > > > <%= f.check_box 'cty_settings[:answer_question]' %><br />
> > > > <%= f.check_box 'cty_settings[:classified]' %><br />
> > > > <%= f.check_box 'cty_settings[:news]' %><br />
> > > > <%= f.check_box 'cty_settings[:bi]' %><br />
> >
> > > > et voilà les erreurs que je me prend :
> >
> > > > 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
> >
>
--~--~---------~--~----~------------~-------~--~----~
Vous avez reçu ce message, car vous êtes abonné au groupe "Railsfrance" de
Google Groups.
Pour transmettre des messages à ce groupe, envoyez un e-mail à l'adresse
[email protected]
Pour résilier votre abonnement envoyez un e-mail à l'adresse
[email protected]
-~----------~----~----~----~------~----~------~--~---