繁体   English   中英

rails: 参数缺失或值为空

[英]rails: param is missing or the value is empty

我不知道为什么会出现此错误:“缺少参数或值为空”

这是我的代码:

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”这可能是我的模型有问题吗?

谢谢你的帮助。 其他一切似乎都运行良好。 如果您需要更多信息,请与我们联系。

由于您不是根据直接用户输入更新或创建记录,因此您不必使用强参数。 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

在您的update方法中,将@todoo = Todoodoo.find(todo_params)更改为@todoo = Todoodoo.find(params[:id]) 强参数 ( todo_params ) 用于赋值,它们并非设计用于查找记录。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM