无法找到id = 15的tasksadmins

时间:2013-01-01 20:50:13

标签: ruby-on-rails html-table

我有两个控制器:Tasksadmins和Workers。

我定义了一个表,叫做:Tasksadmin,并且有参数:admin_email,worker_email,task,done。完成选项是复选框。

在Tasksadmins控制器中,我定义了:

def edit
  @tasksadmin = Tasksadmin.find(params[:id])
end

在这个控制器中,我可以编辑表格的所有行。它工作正常!

在Workerscontroller中,我试图定义:

def edit
  @tasksadmin = Tasksadmin.find(params[:id])
end

我之所以这样做是因为我想获取该行的所有参数,但我会让工作人员选择仅更改done的参数。

不幸的是,我收到了这个错误:

ActiveRecord::RecordNotFound in WorkersController#edit
Couldn't find Worker with id=15

我想我得到了它,因为网址是:localhost:3000/workers/15/edit

(注意:workers / 15 /编辑)

为了解问题所在,我在models/workers/edit.html.erb中写了下一个字:

hello!

所以我认为问题在于url:/

中的工作workers

我该如何解决?

更新

这是workerscontroller

的索引
def index
  @tasks_worker = Tasksadmin.where(:worker_mail => current_user.email)

  respond_to do |format|
    format.html # index.html.erb
    format.json { render json: @workers }
  end
end

这是index.html.erb

<h1>Listing workers</h1>

<table>
   <tr>
      <th>Admin_mail</th>
      <th>Task</th>
      <th>Done</th>
      <th></th>
      <th></th>
      <th></th>
   </tr>

   <% @tasks_worker.each do |task| %>
   <tr>
      <td><%= task.admin_mail %></td>
      <td><%= task.task %></td>
      <td><%= task.done %></td>
      <td><%= link_to 'Edit', edit_worker_path(task) %></td>
   </tr>
   <% end %>
</table>

3 个答案:

答案 0 :(得分:1)

似乎ID = 15的工人不存在。

Worker.find(params[:id])

如果该工作人员不存在,将提升ActiveRecord::RecordNotFound

您可以进入rails控制台并尝试:

Worker.find(15)

如果你想找到返回nil而不是提高你可以使用:

Worker.find_by_id(params[:id])

答案 1 :(得分:1)

我对此不太确定(也许有人可以纠正我),但我认为

@tasksadmin = Tasksadmin.find(params[:id])

只定义变量@tasksadmin

现在,如果您调用localhost:3000/workers/15/edit - URL,Rails实际上正在搜索ID为15(Worker.find(15)

的工作人员

你想要完成什么?

答案 2 :(得分:0)

我在Workerscontroller中添加了这一行:

load_and_authorize_resource :except => [:edit, :update]

和在Tasksadminscontroller中的这一行:

load_and_authorize_resource :except => [:update, :show]