私は、単一のレコードが複数のレコードを別のテーブル(idとhas_many
ステートメントによってリンクされている)になければならない検索を作成しようとしています。その結果として含まれています。Ruby on Rails:複数の行が別のテーブルに存在する必要があるテーブルを検索します
テーブルがあります。users
、skill_lists
、skill_maps
です。
ユーザーは、skill_maps
テーブルの1つのエントリを通じて個々のスキルにマップされます。多くのユーザーは1つのスキルを共有でき、1人のユーザーはskill_maps
テーブルの複数のエントリを通じて多くのスキルを持つことができます。
User_id | Skill_list_id
2 | 9
2 | 15
3 | 9
ユーザー2は9と15
ユーザ3が、私はスキルのセットを持っているすべてのユーザーのハッシュを返す検索を作成しようとしているだけのスキル9
を持っているスキルを持っています。必要なセットskill_ids
は、パラメータとして配列として表示されます。
skill_selection_user_ids = SkillMap.find_all_by_skill_list_id(params[:skill_ids]).map(&:user_id)
@results = User.find(:all, :conditions => {:id => skill_selection_user_ids})
問題は、これがないそれらのすべてを持っているユーザーをこれらのスキルのいずれかを持っているすべてのユーザーを返すことです。
はここで私が使用しているコードです。また、私のユーザーテーブルはskill_listsテーブル:through => :skill_maps
にリンクされており、その逆だから、私は、これは本当の初心者の質問であると確信している私はに全く新たなんだ...
を@user.skill_list
などを呼び出すことができることレール(とプログラミング)。私は検索して解決策を探しましたが、何も見つかりませんでした。私は本当に単一の検索語で問題を説明する方法を知らない。
どうもありがとうございます! この新しいリストでユーザーテーブルを検索する前に.to_aを追加する必要がありました。最終的なコードは次のとおりです。 'skill_selection_user_ids = params [:teach_skill_ids] .map {| s | @results = User.find(:all、:conditions => {:id => skill_selection_user_ids.to_a})を使用すると、 ) ' もう一度ありがとう! – joshblour
できました: '@results = User.find skill_selection_user_ids.entries'。 'entries'は、あなたが単に 'find'にフィードする配列にセットを変換します。 – dynex
あまりにも働いた、ありがとう@dynex! – joshblour