2013-12-08 48 views
0

的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])

我的問題是:它是r ight得到這種方式?我的意思是get方法顯示了url中的所有屬性,但以我用它們全部隱藏的方式顯示。那麼使用get方法是否正確?第二,他們存儲在url中,如果他們不可見?

在這種情況下,如果我沒有在url中看到這些參數存儲在哪裏?

的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 
+0

你需要刪除哪些用戶?只有當前(如「刪除我的個人資料」)或任何(如管理模式)? – okliv

+0

不,不,一切正常,這不是問題。我想知道如果這是正確的方法,請調用一個get方法,其中的參數 – zer0uno

+0

POST(DELETE)中不可見。得到參數在URL中總是可見的.. – okliv

回答

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. 作爲請求身體的一部分

您的瀏覽器大量的數據與每個通常是不可見的相互作用(點擊一個鏈接,提交表單等)發送到服務器給你。查看內置於瀏覽器中的開發人員工具,使其可見。下面是鉻合金的開發工具的截圖:

Screenshot from Chromes developer tools

這是一個POST請求,是你提交一個表單時,經常看到的例子。在「表單數據」下可以看到在GET請求中附加到URL的數據。

+0

謝謝。另一個問題,我用了一個get方法,所以這些屬性應該在url中可見,但它不是。那麼它們在哪裏存儲? – zer0uno

+0

顯示完整routes.rb。我想你有'resource:users'之類的東西,它會覆蓋你的get方法 – okliv

+0

我剛剛編輯它 – zer0uno