【发布时间】:2015-01-28 03:23:20
【问题描述】:
我正在尝试构建一个复选框过滤器,这进一步减少了每个额外复选框的结果数量,其中每个复选框都代表 has_many through 关联中的一个关系。
我有一个具有以下型号的应用:
- 医院
- 医院特色
- 功能
以下是关联:
class Hospital < ActiveRecord::Base
has_many :hospital_features
has_many :features, through: :hospital_features
end
class HospitalFeature < ActiveRecord::Base
belongs_to :hospital
belongs_to :feature
end
class Feature < ActiveRecord::Base
has_many :hospital_features
has_many :hospitals, through: :hospital_features
end
我有一个复选框表单,其中列出了所有可用的功能。
<%= label_tag("helipad", "Helipad") %>
<%= check_box_tag("features[]", "helipad" %>
<%= label_tag("telesurgery", "Telesurgery") %>
<%= check_box_tag("features[]", "telesurgery" %>
<%= label_tag("emergency room", "Emergency Room") %>
<%= check_box_tag("features[]", "emergency room" %>
我正在尝试像您在购物网站上一样进行过滤,其中每个复选框进一步过滤到仅具有所有选中功能的医院。
我现在使用的查询:
hospitals = Hospital.joins(:features).where(features: {name: features} )
反之。每选中一个额外的框都会增加结果的数量,因为它返回的是具有任何一个选中特征的医院,而不是具有所有选中特征的医院。
因此,如果您选中“直升机停机坪”和“远程外科手术”,它应该只返回同时具有“直升机停机坪”和“远程外科手术”的医院,而不是任何具有“直升机停机坪”或“远程外科手术”的医院。
环顾四周,似乎找不到明显的解决方案。我很感激任何帮助。提前致谢。
【问题讨论】:
标签: ruby-on-rails activerecord