2014-06-06 44 views
0

有控制器的以下代碼:如何通過Rails 4使用has_many更新關係?

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 

和視以下代碼:

- @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 

型號代碼:

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 

而且

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

問題是以下事情:當我創建一些BeautySalonEmployee時,選中一些複選框計數(例如,1)都是好的。但是當我嘗試更新這個沒有選中複選框的記錄時,我沒有任何錯誤,但沒有更新,即當我再次打開這個記錄時,我仍然看到1複選框被選中。我該如何解決它?怎麼了?

回答

2

如果未選中複選框,則不會發送它們。

只需添加一個隱藏字段,並將其設置爲相同名稱即可。

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

如果沒有複選框被檢查這將被髮送,但如果他們是他們將被髮送,而不是

相關問題