2012-06-26 65 views
0

我在做一個在線應用程序的法官,所以我有一個用戶模式,一個問題模型和解決方案模型進行多對多的關係。在該解決方案模型中,我有一個名爲「狀態」的額外列,我打算爲某個用戶存儲問題的狀態:已解決,錯誤的解析,未解決。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,並且因爲額外的列而改變了它。我讀過很多關於多對多的關係,但我無法理解這種情況=(

回答

0

只需要使用:

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 

它看起來有點長,但它是非常靈活。

+0

有了這個:'problem.solution.state'它已經爲我提供了當前登錄用戶的解決方案嗎?正如你所說,一個問題可能有很多解決方案。那麼我如何檢索某個用戶的解決方案?例如。 id爲3的用戶? – Nocturn

+0

我喜歡這樣做...請參閱修正的答案 – TomDunning

+0

您的解決方案給了我這個'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

相關問題