我无法弄清楚为什么会出现此错误:“param丢失或值为空”
这是我的代码:
class TodoodooController < ApplicationController
def index
@todos = Todoodoo.where(done: false)
@completes = Todoodoo.where(done: true)
end
def new
@todoo = Todoodoo.new
end
def create
@todoo = Todoodoo.new(todo_params)
if @todoo.save
redirect_to todoodoo_index_path, :notice => "Your To-Do item was created!"
end
end
def update
@todoo = Todoodoo.find(todo_params)
if @todoo.update_attribute(:done, true)
redirect_to todoodoo_index_path, :notice => "Your To-Do item was marked as done!"
else
redirect_to todoodoo_index_path, :notice => "Your To-Do item was unable to be marked as done!"
end
end
def destroy
@todoo = Todoodoo.find(todo_params)
@todoo.destroy
redirect_to todoodoo_index_path, :notice => "Your To-Do item was deleted!"
end
def todo_params
params.require(:todoodoo).permit(:name, :done)
end
end
作为上下文,我正在创建一个非常简单的待办事项应用程序,当它尝试执行“更新”功能时,我遇到了困难。
以下是我对控制器的看法:
<h1> Check: Rule Your Day </h1>
<h2><u> To Do </u></h2>
<% @todos.all.each do |todo| %>
<p>
<strong><%= todo.name %></strong>
<small><%= link_to "Mark as Done", todoodoo_path(todo), :method => :put %></small>
</p>
<% end %>
<h2><u> Completed </u></h2>
<% @completes.all.each do |todo| %>
<p>
<%= todo.name %>
<small><%= link_to "Remove", todo, :confirm => "Is it okay to remove this from the list?", :method => :delete %></small>
</p>
<% end %>
<p><%= link_to "Add a to-do item", new_todoodoo_path %></p>
我的todoodoo模型在文件中没有任何内容。我创建它执行以下“rails g model todoodoo name:string done:boolean”我的模型可能有问题吗?
感谢您的帮助。其他一切似乎都运转良好。如果您需要更多信息,请与我们联系。
答案 0 :(得分:4)
由于您未根据直接用户输入更新或创建记录,因此您不必使用强参数。在find
电话中,您从不必须使用强参数。它仅用于更新和创建记录。
换句话说,你不应该这样做:
Todoodoo.find(todo_params)
但:
Todoodoo.find(params[:id])
您的update
操作应如下所示:
def update
@todoo = Todoodoo.find(params[:id])
if @todoo.update_attribute(:done, true)
redirect_to todoodoo_index_path, :notice => "Your To-Do item was marked as done!"
else
redirect_to todoodoo_index_path, :notice => "Your To-Do item was unable to be marked as done!"
end
end
答案 1 :(得分:0)
在update
方法中,将@todoo = Todoodoo.find(todo_params)
更改为@todoo = Todoodoo.find(params[:id])
。强参数(todo_params
)用于赋值,它们不是用于查找记录。
一旦更改,您可能会因“link_to
错误而导致错误,因为t
看起来不是有效的路径/记录。