我在做一個在線應用程序的法官,所以我有一個用戶模式,一個問題模型和解決方案模型進行多對多的關係。在該解決方案模型中,我有一個名爲「狀態」的額外列,我打算爲某個用戶存儲問題的狀態:已解決,錯誤的解析,未解決。Rails 3的訪問的has_many通過加盟模式在另一個控制器
我試圖修改索引動作在我的問題控制器渲染的問題列表中的問題的狀態(這樣用戶就可以,看他是否已經解決的問題或沒有像我以前說的)。不過,當我訪問視圖時,出現「未初始化的常量Admin :: ProblemsController :: Solution」錯誤。
我真正的新回報率和我的經驗,迄今已確實苛刻,所以我會很感激任何線索。這是在控制器代碼和視圖:
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 %>
我不知道這是最好的我應該訪問解決方案表,或者如果我應該在另一個控制器(在用戶控制器中?在解決方案控制器文件中?也許這樣做)。
我想清楚如何使用「解決方案」聯接表。之前我有一個has_and_belongs_to_many,並且因爲額外的列而改變了它。我讀過很多關於多對多的關係,但我無法理解這種情況=(
有了這個:'problem.solution.state'它已經爲我提供了當前登錄用戶的解決方案嗎?正如你所說,一個問題可能有很多解決方案。那麼我如何檢索某個用戶的解決方案?例如。 id爲3的用戶? – Nocturn
我喜歡這樣做...請參閱修正的答案 – TomDunning
您的解決方案給了我這個'online-judge/app/models/solution.rb:7:語法錯誤,意想不到的tASSOC,期待'}' ... ambda {| USER_ID | :conditions => {:user_id => user_id}}'。玩它我認爲它應該'範圍:for_user,lambda {| user_id | {:conditions => {:user_id => user_id}}}'但是如果我對給定的問題沒有解決方案,'state'調用給我一個'nil:Nilclass'。 – Nocturn