匹配所有条件hansack

时间:2012-12-11 12:15:53

标签: sql ruby-on-rails-3 ransack

我正在尝试过滤用户的外语知识。我的LanguageSkill模型属于MemberLanguageLanguageLevel

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,但如果我输入[法语,精通]和[英语,高级],我希望它能够获取所有讲法语的成员精通(或更高)级别和高级(或更高)级别的英语。

0 个答案:

没有答案