簡體   English   中英

Rails 3通過另一個控制器中的聯接模型訪問has_many

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM