0

我正在做一个在线法官应用程序,所以我有一个用户模型、一个问题模型和一个解决方案模型来建立多对多关系。在那个解决方案模型中,我有一个名为“状态”的额外列,我计划在其中存储某个用户的问题状态:已解决,错误的答案,未解决。

我正在尝试修改问题控制器中的索引操作,以在问题列表中呈现问题的状态(这样用户就可以看到他是否解决了问题,就像我之前所说的那样)。不过,当我访问视图时,我遇到了“未初始化的常量 Admin::ProblemsController::Solution”错误。

我对 RoR 真的很陌生,到目前为止我的经验非常苛刻,所以我会很感激任何线索。这是控制器和视图中的代码:

问题控制器.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 并因为额外的列而改变了它。我已经阅读了很多关于多对多关系的内容,但对于这种情况我无法理解 =(

4

1 回答 1

0

只需要使用:

problem.solution.state

除非一个问题可能有很多解决方案,否则它需要类似于:

problem.solutions.first.state

然而,这只会给出第一个状态,所以我会在问题中定义一个计算状态的方法(例如,如果任何解决方案解决了它,那么问题就解决了)

对于 1 个问题,给定用户的许多解决方案。在解决方案.rb

scope :for_user, lambda {|user_id| :conditions => {:user_id => user_id}}

然后我们可以调用:

problem.solutions.for_user(current_user.id).first.state

它可能看起来有点长,但它非常灵活。

于 2012-06-26T05:53:54.517 回答