Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 不允许的参数,尽管白名单属性rails 4_Ruby On Rails_Ruby_Web_Devise - Fatal编程技术网

Ruby on rails 不允许的参数,尽管白名单属性rails 4

Ruby on rails 不允许的参数,尽管白名单属性rails 4,ruby-on-rails,ruby,web,devise,Ruby On Rails,Ruby,Web,Devise,我有一个属性:completed,这是一个布尔值(true/false)。在索引页面上,我有一个复选框,选中该复选框后,我希望更新该对象的值。以下是复选框的内容: <div class="task_area"> <%= link_to task.title, task_path(task), class: 'wrapper_task_name'%> <%= form_for task do |f| %> <%= f

我有一个属性:completed,这是一个布尔值(true/false)。在索引页面上,我有一个复选框,选中该复选框后,我希望更新该对象的值。以下是复选框的内容:

<div class="task_area">
      <%= link_to task.title, task_path(task), class: 'wrapper_task_name'%>
      <%= form_for task do |f| %>
        <%= f.check_box :completed %>
        <%= f.submit 'update' %>
      <% end %>
</div>
但在日志中我得到:

Started PATCH "/tasks/45" for ::1 at 2016-10-16 17:35:43 -0400
Processing by TasksController#update as HTML
  Parameters: {"utf8"=>"���", "authenticity_token"=>"ogAki1fvq6Eq+ONwjxeYwf+ZOrmkv+EAuDmZRTEEJ05xB3cf/XyHEavNDZyBWUOL0gUuEOglyM2uDNoJHcDcJg==", "task"=>{"completed"=>"1"}, "commit"=>"update", "id"=>"45"}
  User Load (0.8ms)  SELECT  "users".* FROM "users" WHERE "users"."id" = $1  ORDER BY "users"."id" ASC LIMIT 1  [["id", 1]]
  Task Load (0.7ms)  SELECT  "tasks".* FROM "tasks" WHERE "tasks"."user_id" = $1 AND "tasks"."id" = $2 LIMIT 1  [["user_id", "1"], ["id", 45]]
Unpermitted parameter: completed
   (0.4ms)  BEGIN
   (0.4ms)  COMMIT
Redirected to http://localhost:3000/
Completed 302 Found in 22ms (ActiveRecord: 2.3ms)

我想知道Desive是否需要用户身份验证导致了这个问题。有人知道我能做些什么来解决这个问题吗?

字段的名称是
:completed
而不是
:boolean
-这是您需要在许可行中输入的内容。例如:

def task_params
  params.require(:task).permit(:title, :text, :completed, :current_user, :email)
end 
我还可以强烈建议不要将
:current_user
设置为允许的字段吗?这将允许恶意用户为其他用户创建任务。我会将其从允许列表中删除,并手动添加到创建方法中,例如使用
current\u user.tasks.create(task\u params)

完成上述代码后,将被列入白名单

您已在
任务\u控制器
的白名单参数中添加了在处完成的
的类型(
布尔值
)。应该是这样的

def task_params
 params.require(:task).permit(:title, :text, :completed, :current_user, :email)
end 

我看不到您在tasks\u controller.rb+1中关于当前用户的属性:completed列为白色。应从会话中获取当前用户。这同样适用于现场电子邮件,如果您使用它来识别发送请求的用户
def task_params
    params.require(:task).permit(:title, :text, :current_user, :email, :completed)
end 
def task_params
 params.require(:task).permit(:title, :text, :completed, :current_user, :email)
end