Как построить удалить маршрут в link_to в рельсах 3.1? - PullRequest
1 голос
/ 29 декабря 2011

Наличие 2 моделей клиентов и comm_log.Их связь следующая:

resources :customers do
  comm_logs
end

Код rspec для уничтожения в контроллере comm_logs прошел без ошибок.Лямбда-блок подтвердил, что после успешного удаления количество журналов сообщений уменьшилось на 1.Все в контроллере кажется правильным.

Вывод граблей маршрутов:

       new_customer_comm_log GET    /customers/:customer_id/comm_logs/new(.:format)                 {:action=>"new", :controller=>"comm_logs"}
      edit_customer_comm_log GET    /customers/:customer_id/comm_logs/:id/edit(.:format)            {:action=>"edit", :controller=>"comm_logs"}
           customer_comm_log GET    /customers/:customer_id/comm_logs/:id(.:format)                 {:action=>"show", :controller=>"comm_logs"}
                             PUT    /customers/:customer_id/comm_logs/:id(.:format)                 {:action=>"update", :controller=>"comm_logs"}
                             DELETE /customers/:customer_id/comm_logs/:id(.:format)                 {:action=>"destroy", :controller=>"comm_logs"}

На самом деле, запись не была удалена после нажатия кнопки удаления, и страница не была перенаправлена ​​на предыдущую страницукак и в контроллере (страница шоу просто остается и никуда не перенаправляется после удаления).Похоже, что действие удаления было направлено в правильный путь.Скорее всего, проблема связана с представленной ниже ссылкой link_to:

<%= link_to 'delete', customer_comm_log_path(@customer, @comm_log), :method => :delete, :confirm => "are you sure?", :remote => true %>

Что-то не так в ссылке link_to выше?спасибо.

1 Ответ

1 голос
/ 29 декабря 2011

Есть пара вещей, которые вы можете пропустить.Я предполагаю, что вы используете jQuery, поскольку вы не указали в своем вопросе.

a) Убедитесь, что у вас установлен jQuery

b) Убедитесь, что вы установили Rails UJS (Ненавязчивый адаптер Javascript) либо вручную, либо с использованием гема (инструкции по Rails 3.1 также есть по этой ссылке): https://github.com/rails/jquery-ujs

c) Ваш link_to должен сообщить адаптеру UJS Rails, что он должен захватыватьнажмите ссылку и отправьте запрос DELETE через AJAX

<%= link_to 'delete', customer_comm_log_path(@customer, @comm_log), :remote => true, :method => :delete) %>

Так что в link_to выше вы пропустили :remote => true

Rails захватит щелчок пользователя по этой ссылке изатем начните вызов jQuery $.ajax на ваш сервер, который включает пару параметров, чтобы сообщить серверу Rails, что это удаленный запрос DELETE.

d) Если вы перенаправляете в контроллере с помощью нажатия пользователемДля такой удаленной ссылки вы должны указать Rails правильно обрабатывать перенаправления AJAX, поместив этот код в ApplicationController.Если вы этого не сделаете, ссылка удалит запись, но затем будет просто сидеть там, а не перенаправлять.

  # Allows redirecting for AJAX calls as well as normal calls
  def redirect_to(options = {}, response_status = {})
    if request.xhr?
      render(:update) {|page| page.redirect_to(options)}
    else
      super(options, response_status)
    end
  end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...