0

我有两个控制器: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/edit)

为了了解问题出在哪里,我在我的models/workers/edit.html.erb:

hello!

所以我认为问题在于workersurl 中的工作:/

请问我该如何解决?

更新:

这是 的索引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>
4

3 回答 3

1

似乎 ID=15 的 Worker 不存在。

Worker.find(params[:id])

ActiveRecord::RecordNotFound如果该 Worker 不存在,将引发。

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

Worker.find(15)

如果你想找到 return nil 而不是 raise 你可以使用:

Worker.find_by_id(params[:id])
于 2013-01-01T20:55:40.287 回答
1

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

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

只是定义了变量@tasksadmin

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

你想要完成什么?

于 2013-01-01T21:36:27.143 回答
0

我在 Workerscontroller 中添加了这一行:

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

Tasksadminscontroller 中的这一行:

load_and_authorize_resource :except => [:update, :show]
于 2013-01-02T14:23:10.383 回答