2017-08-04 2 views
0

Modèle utilisateurSimple_form & Nested attributs Enregistrer modèle blanc en raison de la date attributs

class User < ApplicationRecord 
    has_many :experiences, dependent: :destroy 
    accepts_nested_attributes_for :experiences, reject_if: :all_blank, allow_destroy: true 
end 

Modèle Expérience

class Experience < ApplicationRecord 
    belongs_to :user 
end 

Mon entrée dans la vue (_experience_fields_user.html)

<div class="nested-fields"> 
    <%= f.input :start_date as: :date, discard_day: true, order: [:month, :year], start_year: Date.today.year , end_year: Date.today.year - 37 %> 
</div> 

= > Donc, cela affiche 2 champs "Mois" et "Année"

Si je soumets ma forme, avec un champ vide les params sont:

"expertise"=>"", "start_date(3i)"=>"1", "start_date(2i)"=>"", "start_date(1i)"=>"" 

Mon problème: "start_date (3i)" => "1"

Cette params n'est pas vide (il est représenter la valeur du jour qui n'est pas affichée sur la vue), et ne permet pas de remplir la condition des attributs imbriqués "reject_if:: all_blank"

Il existe un moyen de changer la valeur d'un jour si le mois et l'année sont vides? Thx

+0

vous pourriez faites-le fonctionner en remplaçant «as:: date» par «as:: string» dans votre formulaire. – Belder

+0

Cela change le comportement de l'entrée et ce n'est pas le meilleur moyen pour une bonne expérience utilisateur – Etienne

+0

Oui, vous avez raison. J'ai également eu ce problème dans le passé et j'essaie de me rappeler comment je l'ai résolu. [This] (https://stackoverflow.com/questions/29075404/how-can-i-generate-inputtype-date-with-simple-form) pourrait être une option. – Belder

Répondre

1

J'ai finalement trouvé un moyen:

J'ai créé une condition pour le test si une autre entrée est vide (dans ce cas company_name)

Dans mon modèle utilisateur:

accepts_nested_attributes_for :experiences, reject_if: :reject_xp, allow_destroy: true 

def reject_xp(attributes) 
    attributes['start_date(3i)'] == "1" && attributes['company_name'].blank? 
end