2 votes

la valeur de l'option de la liste déroulante à null

J'ai une liste déroulante avec plusieurs valeurs de boutons radio à choisir. Si vous ne choisissez pas une option, la valeur sera enregistrée dans la base de données comme nulle. Mais si vous choisissez une option, vous ne pouvez pas la décocher. J'ai donc besoin d'une option "non indiqué" dans la liste déroulante, qui enregistrerait la valeur comme nulle dans la base de données.

Comment puis-je modifier ces paramètres de la meilleure façon possible afin de pouvoir enregistrer la valeur null dans la base de données. Je dois modifier le code ci-dessous pour qu'une option supplémentaire "non sélectionné" apparaisse et que la valeur null soit enregistrée dans la base de données lorsque l'option "non sélectionné" est choisie.

<%= account_pref.input "editorial_#{key}".to_sym, :as => :radio, :collection => options_for(Editorial, key.to_sym), :wrapper_html => { :class => "compact" }, :label => key.titleize  %>

1voto

Máxima Alekz Points 101

Je pense que la chaîne vide devrait suffire.

:collection => [['<none>','']] + options_for(Editorial, key.to_sym)

Cela a fonctionné pour moi avec un champ de type entier, mais pour un champ de type chaîne, c'est peut-être plus difficile car les valeurs des options ne peuvent être que des chaînes et il n'y a pas vraiment de concept de valeurs nulles dans les formulaires. Peut-être que quelqu'un connaît une astuce intelligente, mais vous pouvez toujours régler cela dans le contrôleur :

def create
  @account = Account.new(params[:account])
  @account.editorial = nil if @account.editorial.empty?

  ...
end

Vous pouvez aussi remplacer le setter dans votre modèle pour faire la même chose. L'une ou l'autre de ces options semble un peu bricolée, cependant.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X