私はオンライン審査員の申請を行っているので、多対多の関係を作るための User モデル、Problem モデル、Solution モデルがあります。そのソリューション モデルには、特定のユーザーの問題の状態 (解決済み、間違った答え、未解決) を保存する「状態」という追加の列があります。
問題コントローラーの index アクションを変更して、問題の状態を問題リストに表示しようとしています (前に述べたように、ユーザーは問題を解決したかどうかを確認できます)。それにもかかわらず、ビューにアクセスすると、「初期化されていない定数 Admin::ProblemsController::Solution」エラーが発生します。
私は RoR を初めて使用し、これまでの経験は非常に厳しいものでした。コントローラーとビューのコードは次のとおりです。
problems_controller.rb
def index
@problems = Problem.all
if current_user
@solutions = Solution.includes(:problem).where(:user_id => current_user.id)
end
respond_to do |format|
format.html # index.html.erb
format.json { render json: @problems }
end
end
ビュー/問題/index.html.erb
<% @problems.each do |problem| %>
<tr>
<td><%= problem.name %></td>
<td><%= problem.code %></td>
<td><%= problem.description %></td>
<% if current_user %>
<%= for solution in @solutions do %>
<% if solution %>
<td><%= solution.state%></td>
<% else %>
<td>Not Solved</td>
<% end %>
<% end %>
<% end %>
<td><%= link_to 'Show', problem %></td>
<% if current_user && current_user.is_admin? %>
<td><%= link_to 'Edit', edit_problem_path(problem) %></td>
<td><%= link_to 'Delete', problem, method: :delete, data: { confirm: 'Are you sure?' } %></td>
<% end %>
</tr>
<% end %>
それが Solutions テーブルにアクセスする最善の方法なのか、それとも別のコントローラーでそれを行うべきなのか (ユーザーコントローラーで? おそらくソリューションコントローラーファイルで?) はわかりません。
その「ソリューション」結合テーブルの使用方法を明確にしたいと思います。以前に has_and_belongs_to_many があり、余分な列のために変更しました。私は多対多の関係についてたくさん読んだことがありますが、この場合は理解できません =(