Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/65.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/neo4j/3.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 对get方法和参数传递的质疑_Ruby On Rails_Params - Fatal编程技术网

Ruby on rails 对get方法和参数传递的质疑

Ruby on rails 对get方法和参数传递的质疑,ruby-on-rails,params,Ruby On Rails,Params,在routes.rb文件中 get 'commands/deleteuser/' => 'commands#delete_user', as: :delete_user 在视图中 <%= link_to "Delete", delete_user_path(:user_id => user.id, :command_id => @command.id), data: { confirm: "Are you sure?" } %> 不应通过GET提供更改某些内容(

routes.rb文件中

get 'commands/deleteuser/' => 'commands#delete_user', as: :delete_user
在视图中

<%= link_to "Delete", delete_user_path(:user_id => user.id, :command_id => @command.id), data: { confirm: "Are you sure?" } %>

不应通过GET提供更改某些内容(尤其是破坏性内容)的操作/链接。这是危险的,因为例如,搜索引擎抓取您的网站可能会跟随这样的链接,并意外删除用户

在这种情况下,应该使用HTTP DELETE。为此,

  • 把你的路线改成

    delete 'commands/deleteuser' => 'commands#delete_user', as: :delete_user
    
  • 在链接帮助器中,添加“方法”属性

    <%= link_to "Delete", delete_user_path(:user_id => user.id, :command_id => @command.id), method: :delete, data: { confirm: "Are you sure?" } %>
    
    user.id,:command\u id=>@command.id),方法::删除,数据:{确认:“确定吗?”}%>
    
有两种方法可以通过请求将参数从浏览器传递到服务器:

  • 作为查询字符串参数,即作为URL的一部分,例如example.com?param=value
  • 作为请求机构的一部分
  • 您的浏览器通过每次交互(单击链接、提交表单等)将大量数据传输到服务器,这些交互通常对您不可见。请看一下浏览器中内置的开发人员工具,以使其可见。以下是Chromes developer tools的屏幕截图:


    这是一个POST请求,您通常会在提交表单时看到。GET请求中附加到URL的数据在此处的“表单数据”下可见。

    您需要删除哪些用户?只有当前(如“删除我的个人资料”)或任何(如在管理模式下)?不,不,所有都在工作,这不是问题。我想知道这是否是正确的方法,调用参数在urlPOST(DELETE)中不可见的get方法。get参数在url中始终可见。另一个建议是:不要使用
    User.find
    (特别是用于删除)。使用
    @command.users.where(id:params[:user\u id])
    在您的情况下,可以将param:user\u id更改为any并删除任何用户。在我的案例中,关系
    @command.users
    将仅作用于当前
    @command
    的可删除用户谢谢。另一个问题,我使用了一个get方法,因此属性应该在url中可见,但事实并非如此。那么它们存储在哪里?show full routes.rb。我猜你有类似于
    resources:users
    的东西,它会覆盖你的getmethod@okliv我认为antox GET方法很有效。他想知道使用GET是否是个好主意。@antox我已经更新了我的答案,并解释了参数的去向。
    <%= link_to "Delete", delete_user_path(:user_id => user.id, :command_id => @command.id), method: :delete, data: { confirm: "Are you sure?" } %>