我正在尝试过滤用户的外语知识。我的LanguageSkill
模型属于Member
,Language
和LanguageLevel
。
class LanguageSkill < ActiveRecord::Base
attr_accessible :member_id, :language_id, :language_level_id
belongs_to :member
belongs_to :language
belongs_to :language_level
end
另一个重要信息是LanguageLevel
具有difficulty
属性(只是一个整数,因此可以订购不同的语言级别)
成员可能具有多种语言的语言技能,但当我查询它们时,我希望语言和language_level相关联,即语言级别与所讨论的语言相关,而不是与任何语言相关。 / p>
语言字段部分如下:
<div class="field">
<div class="language">
<%= select_tag :'q[language_skills_language_id_eq_all][]', options_from_collection_for_select(Language.all, 'id', 'name') %>
</div>
<div class="language_level">
<%= select_tag :'q[language_skills_language_level_difficulty_gteq_all][]', options_from_collection_for_select(LanguageLevel.all, 'difficulty', 'name') %>
</div>
<%= link_to '#', :class => "remove_fields" do %>
<button class="btn btn-link btn-mini">
<i class="icon-remove"></i> <%= t('general.remove') %>
</button>
<% end %>
</div>
如果我使用上述部分的两部分,则会生成以下SQL:
SELECT DISTINCT "members".* FROM "members" LEFT OUTER JOIN "language_skills" ON "language_skills"."member_id" = "members"."id" LEFT OUTER JOIN "language_levels" ON "language_levels"."id" = "language_skills"."language_level_id" WHERE ((("language_skills"."language_id" = 38 AND "language_skills"."language_id" = 59) AND ("language_levels"."difficulty" >= 5 AND "language_levels"."difficulty" >= 3)))
我不知道究竟什么是我想要搜索的SQL,但如果我输入[法语,精通]和[英语,高级],我希望它能够获取所有讲法语的成员精通(或更高)级别和高级(或更高)级别的英语。