Кнопка Rails вызывает метод контроллера и не перенаправляет - PullRequest
0 голосов
/ 05 апреля 2019

Я пытаюсь вызвать метод в контроллере с помощью кнопки в представлении Rails.Я последовал за некоторыми другими вопросами здесь и дошел до этого.

routes.rb:

namespace :processing do
  resources :applications do
    stuff
    post :test, :to => 'applications#test', :on => :member
  end
end

метод контроллера просто называется test.Вот соответствующая часть контроллера:

def test
  @application = Application.find_by(record_id: params[:id])
  puts 'THIS IS A TEST'
end

Наконец, я вызываю маршрут с этим кодом в файле .erb:

<%= button_to 'Send to Processing', 
      test_processing_application_path(record_id), 
      method: :post, form_class: 'btn btn-danger' %>

Кнопка отображается правильно и выглядитследовать по правильному маршруту.Однако моя проблема в том, что кнопка пытается перенаправить и отобразить маршрут /processing/applications/715707082/test, который не существует и вызывает проблему.

Как мне просто сделать так, чтобы эта кнопка не перенаправляла / рендерила что-то, а вместо этого просто вызываламетод со страницы он в настоящее время на?Пожалуйста, не стесняйтесь связать меня с соответствующими сообщениями или закройте это, если это дублирует существующий вопрос.

Ответы [ 2 ]

1 голос
/ 06 апреля 2019

Маршрут в вашем файле rout.RB определяет

test_processing_application_path как POST к пути

/processing/applications/:id/test(.:format)

Ожидается, что будет реализован в контроллере

processing/applications#test -

это файл в app/controllers/processing/applications_controller.rb, который определяет контроллер как:

module Processing
  class Applications < ApplicationController
    def test
      # your code here
    end
  end
end
0 голосов
/ 05 апреля 2019

Вместо использования метода вы должны использовать action, а remote true вызовет запрос ajax и предотвратит перенаправление.Затем создайте файл test.js.erb для обработки ajax-запроса на обновление DOM, который будет выполнен после вызова действия.

<%= button_to 'Send to Processing',test_processing_application_path(record_id), 
action: :test, form_class: 'btn btn-danger', :remote=>true %>

Надеюсь, это поможет.

Приветствия.

...