2015-08-08 51 views
0

我有一個病人模型,它有knowndiseases列。它存儲一系列特定疾病的字符串,如DM,HT等。我希望我的患者能夠通過選中這些複選框併發布表單來更新他/她的知識庫列。通過Ruby on Rails上的多個複選框進行更新

一旦我發送表單,我可以看到所選複選框的值爲數組,位於params[:knowndiseases]。但是,當我使用user_params方法訪問這些值時,數據庫中的患者記錄不會更新。

我再次嘗試刪除我的複選框中的:multiple => true選項,這次我的患者僅通過檢查的最後一個值更新,而不與其他人進行更新。

這裏是我的形式:

<%= simple_form_for @patient, url: update_profile_part2_path(@patient), :method => 'patch', :html => {class: 'form-horizontal'} do |f| %> 
<%= f.check_box :knowndiseases, { :multiple => true}, 'DM', nil%> DM 

<%= f.check_box :knowndiseases, { :multiple => true}, 'HT', nil%> HT 

<%= f.check_box :knowndiseases, { :multiple => true}, 'KAH', nil %> KAH 

<%= f.check_box :knowndiseases, { :multiple => true}, 'Astım', nil %> Astım 

<%= f.check_box :knowndiseases, { :multiple => true}, 'Malignite', nil %> Malignite 

<%= f.check_box :knowndiseases, { :multiple => true}, 'Guatr', nil %> Guatr 
<% end %> 

,我已經用於創建knowndiseases列遷移:

add_column :users, :knowndiseases, :string, array: true 

不久,我能做些什麼來更新knowndiseases屬性與數組通過params[:knowndiseases]

回答

0

我認爲最好的方法是可能在患者和已知疾病之間創建一個HABTM關係,方式是@ patient.knowndiseases將持有您通過表單傳遞的信息。如果你決定這樣做,check_box_tag會非常有用,因爲它可以讓Rails做後端魔術。如果已知疾病需要添加到數據庫中,將已知疾病分離爲它自己的模型可以在未來進行更多的控制。這也使得它更輕便

例如,用簡單的形式在兩者之間的HABTM關係,你可以有

<%for known in Knowndiseases.all %> 
<%= check_box_tag "patient[knowndiseases_ids][]", known.id, @patient.knowndiseases.include?(known)%> 
<% known.name %> 
<%end%> 

在你的控制器,你仍然會傳遞了一個PARAMS:knowndieases []並在更新方法中一定要把以下內容考慮爲一個空數組。

def update 
params[:patient][:knowndieases_ids] ||= [] 
end