Ruby on rails 对get方法和参数传递的质疑
在routes.rb文件中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提供更改某些内容(
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),方法::删除,数据:{确认:“确定吗?”}%>
这是一个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?" } %>