[英]Rails 3 accessing has_many through join model in another controller
我正在做一個在線判斷應用程序,所以我有一個用戶模型,一個問題模型和一個解決方案模型來建立多對多關系。 在該解決方案模型中,我還有一個名為“狀態”的列,我打算在其中存儲特定用戶的問題狀態:已解決,錯誤的答案,未解決。
我正在嘗試在我的問題控制器中修改索引操作,以在問題列表中呈現問題的狀態(以便用戶可以查看他是否已解決問題,如我之前所說)。 但是,訪問視圖時出現“未初始化的常量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
views / problems / 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 %>
我不確定這是否是訪問解決方案表的最佳方法,還是應該在另一個控制器中(在用戶控制器中?還是在解決方案控制器文件中?)進行訪問。
我想弄清楚如何使用“解決方案”聯接表。 我之前有一個has_and_belongs_to_many,並由於增加了列而對其進行了更改。 我已經閱讀了很多關於許多關系的文章,但是在這種情況下我無法理解=(
只需使用:
problem.solution.state
除非一個問題可能有很多解決方案,否則它必須是這樣的:
problem.solutions.first.state
但是,這只會給出第一個的狀態,因此我將在“問題”中定義一個計算狀態的方法(例如,如果任何解決方案都解決了問題,那么問題就解決了)
對於1個問題,給定用戶有許多解決方案。 在Solution.rb中
scope :for_user, lambda {|user_id| :conditions => {:user_id => user_id}}
然后我們可以調用:
problem.solutions.for_user(current_user.id).first.state
它可能看起來有點長,但是它非常靈活。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.