我有两个控制器:Tasksadmins和Workers。
我定义了一个表,叫做:Tasksadmin,并且有参数:admin_email,worker_email,task,done。完成选项是复选框。
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>
答案 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]