怀疑get方法和传递参数

时间:2013-12-08 10:32:26

标签: 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?" } %>

通过这种方式,我可以从动作中调用(并且可以正常工作)

user = User.find(params[:user_id])

我的问题是:以这种方式进入是否正确?我的意思是get方法显示了网址中的所有属性,但在我使用的方式中,它们都是隐藏的。那么使用get方法是正确的吗?如果在网址中它们不可见,它们存储在哪里?

如果我在网址中没有看到,那么在这种情况下存储的params在哪里?

的routes.rb

FwLab::Application.routes.draw do
  get 'commands/deleteuser/'            => 'commands#delete_user',          as: :delete_user
  patch 'users/:id/changeadmin'         => 'users#changeadmin',             as: :changeadmin
  post 'commands/execute'               => 'commands#execute',              as: :execute
  get 'commands/:id/userslist'          => 'commands#users_list',           as: :list
  get 'commands/:id/adduserindex'       => 'commands#add_user_index',       as: :add_user_index
  post 'commands/adduser'               => 'commands#user_add',             as: :user_add

  resources :users,    only: [:create, :edit, :update, :index, :destroy]
  resources :sessions, only: [:new, :create, :destroy]
  resources :commands, only: [:index, :new, :create, :edit, :update, :destroy]



  root 'sessions#new'
  match '/about',   to: 'static_pages#about',   via: 'get'
  match '/help',    to: 'static_pages#help',    via: 'get'
  match '/signup',  to: 'users#new',            via: 'get'
  match '/signout', to: 'sessions#destroy',     via: 'delete'
  match '/home',    to: 'commands#index',       via: 'get'
end

1 个答案:

答案 0 :(得分:2)

不应通过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?" } %>
    

有两种方法可以通过请求将参数从浏览器传递到服务器:

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

    Screenshot from Chromes developer tools

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