2013-12-08 4 views
0

В routes.rb файлСомнения метода 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?" } %> 

В этом случае я могу позвонить от действия (и она работает)

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

Мой вопрос: это r не так ли? Я имею в виду, что метод 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 с параметрами, которые не видны в URL-адресе – zer0uno

+0

POST (DELETE). get params всегда видны в 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. как часть тела запроса

Ваш браузер передает много данных на сервер при каждом взаимодействии (щелкнуть по ссылке, подав форму и т.д.), которые, как правило, невидимы тебе. Взгляните на инструменты разработчика, встроенные в ваш браузер, чтобы сделать их видимыми. Вот скриншот из Chromes инструментов разработчика:

Screenshot from Chromes developer tools

Это запрос POST, то, что вы обычно видите, например, при отправке формы. Данные, которые будут добавлены к URL-адресу в запросе GET, видны здесь в разделе «Данные формы».

+0

Спасибо. Другой вопрос, я использовал метод get, поэтому атрибуты должны быть видны в URL-адресе, но так оно и не ... и где они хранятся? – zer0uno

+0

показать все маршруты.rb. я думаю, у вас есть что-то вроде 'resources: users', и оно отменяет ваш метод get – okliv

+0

Я только что отредактировал его – zer0uno

Смежные вопросы