2014-06-06 1 views
0

Il y a le code suivant du contrôleur:Comment mettre à jour les relations en utilisant has_many dans Rails 4?

def create 
    @employee = business.beauty_salon_employees.build(employee_params) 
    if @employee.save 
       # 
    else 
     render 'new' 
    end 
end 

def edit 
    @employee = business.beauty_salon_employees.find(params[:id]) 
end 

def update 
    @employee = business.beauty_salon_employees.find(params[:id]) 
    if @employee.update(employee_params) 
       # 
    else 
     render 'edit' 
    end 
end 

protected 
    def employee_params 
    params.require(:beauty_salon_employee).permit(:name, :description, :phone, { beauty_salon_service_ids: [] }) 
end 

Et le code suivant de vue:

- @business.beauty_salon_services.each do |s| 
    .row 
     = check_box_tag "beauty_salon_employee[beauty_salon_service_ids][]", s.id, @employee.beauty_salon_services.include?(s) 
     = s.name 

Code Modèles:

has_many :beauty_salon_employee_services, dependent: :destroy 
has_many :beauty_salon_services,     through: :beauty_salon_employee_services 
accepts_nested_attributes_for :beauty_salon_services 

Et

has_many :beauty_salon_employee_services, dependent: :destroy 
has_many :beauty_salon_employees,    through: :beauty_salon_employee_services 

Le problème est le suivant: quand je crée un BeautySalonEmployee avec quelques cases à cocher cochées (par exemple, 1) tout est bon. Mais lorsque j'essaie de mettre à jour cet enregistrement sans cases à cocher, je n'obtiens aucune erreur, mais rien n'est mis à jour, c'est-à-dire lorsque j'ouvre à nouveau cet enregistrement, je vois toujours 1 case cochée. Comment puis-je le réparer? Qu'est-ce qui ne va pas?

Répondre

2

Si les cases à cocher ne sont pas cochées, elles ne sont pas envoyées.

Ajoutez simplement un champ masqué avec le même nom défini à zéro, par ex.

= hidden_field_tag 'beauty_salon_employee[beauty_salon_service_ids][]', nil

Ce sera envoyé si aucune des cases sont cochées mais si elles sont ils seront envoyés à la place

Questions connexes