私は従業員ビューを持っています。ここには、すべてのスキルがリストされています。スキルテーブルには、自分のdbのスキルテーブルに書き込まれています。すべての従業員に対して、必要な場合と同様に、すべてのスキルが表示されます。Rails、このn + 1を解決するためのヒント?
従業員とスキルは、多くの場合:関連付けを伴って相互に関連しています。
class Employee < ApplicationRecord
has_many :employeeskillsets, foreign_key: "employee_id"
has_many :skills, through: :employeeskillsets
end
class Skill < ApplicationRecord
has_many :employeeskillsets, foreign_key: "skill_id"
has_many :employees, through: :employeeskillsets
end
class Employeeskillset < ApplicationRecord
belongs_to :employee, foreign_key: 'employee_id'
belongs_to :skill, foreign_key: 'skill_id'
end
すべてのこれらのスキルは(あたり余分に必要コミットしない、削除/直接挿入]をクリックします)、その従業員にその特定のスキルを無効/有効にするためにトグルされているボタンとして表示されます。
<%= link_to apply_skill_employee_path(employee: @employee, skill_id: skill.id), method: :put, remote: :true do %>
<%= skill.name %></div><% end %>
ただし、ページを読み込むと、ボタンが色付きで表示されます。スキルが既に有効になっている場合は、ボタンの色は緑、灰色でなければなりません。そしてここに私の問題が始まります: 私のアプリは、それぞれのスキルを1つの別個のselectステートメントでチェックします。私はこれに次のコードを使用します:
<%= link_to apply_skill_employee_path(employee: @employee, skill_id: skill.id), method: :put, remote: :true do %>
<% if @employee.skills.exists?(skill.id) %>
<div class="button skill e-true"><%= skill.name %></div>
<% else %>
<div class="button skill"><%= skill.name %></div>
<% end %>
私はすでにインクルードを使用しようとしましたが、存在するようですか?各スキルを個別にチェックします。
誰かがここで提案をしていますが、どのように私はこれを解決できましたか?
おかげさまで、私はすべてが必要であると言いたいと思います。
編集1:私は部分的にこれを表現することを忘れています(これは知っておくことが重要な場合)。 ここに、employees_controllerの@employee varで使用されているものがあります。
@employee = Employee.find_by(id: params[:id])
@maxご丁寧にご教示ください。afaikスコープクエリーDBもあります。 –