我有三个表:疾病,症状和辅助表,用于连接has_many至:relationship的其他两个。
我希望实施一个用户输入症状并收到可能疾病列表的系统。
使用下面的代码我可以使用find(1,2)来显示同时出现症状1和2的所有疾病。但是,我希望这两个常量是用户提供的通过表单提供的数据。我对RoR有些新意,所以我不知道该怎么做。
symptoms = Symptom.find(params[:symptom_ids]) # symptom_ids is an array of ids
illnesses = Illness.joins(illness_symptoms: :symptom)
.where("symptoms.id in (?)", symptoms)
.group("illnesses.id")
.having("count(illnesses.id) >= ?", symptoms.length)
在模型中:
scope :with_symptoms, -> (symptoms) { joins(illness_symptoms: :symptom)
.where("symptoms.id in (?)", symptoms)
.group("illnesses.id")
.having("count(illnesses.id) >= ?", symptoms.length) }
我将这些用于Illness.with_symptoms(Symptom.find(1,2))
(我正在寻找用用户提供的数据替换1,2的方法)。
答案 0 :(得分:2)
您可以通过以下形式执行此类操作:
<% form_tag some_path do %>
<% @symptoms.each do |symptom| %>
<%= label_tag do %>
<%= check_box_tag "symptom_ids[]", symptom.id %>
<%= symptom.name %>
<% end %>
<% end %>
<% end %>
用户可以使用复选框来选择症状。