0

我正在尝试过滤我的用户以了解他们的外语知识。我有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属性(只是一个整数,因此可以对不同的语言级别进行排序)

一个成员可能具有多种语言的语言技能,但是当我查询它们时,我希望将语言和语言级别联系起来,即语言级别与所讨论的语言相关,而不是与任何语言相关。

语言字段部分如下:

<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)))

我不确切知道我想要 ransack 生成的 SQL 是什么,但是如果我输入 [French, Proficient] 和 [English, advanced] 我希望它可以获取所有讲法语的成员精通(或更高)水平和高级(或更高)水平的英语。

4

0 回答 0