#ruby-on-rails #ruby #erb #rails-routing
#ruby-on-rails #ruby #ошибка #рельсы-маршрутизация
Вопрос:
Я пытаюсь вызвать метод в контроллере с кнопки в представлении 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
который не существует и вызывает проблему.
Как мне просто заставить эту кнопку не перенаправлять / отображать что-либо, а вместо этого просто вызвать метод со страницы, на которой он находится в данный момент? Пожалуйста, не стесняйтесь ссылаться на соответствующие сообщения или закрывать это, если оно дублирует существующий вопрос.
Ответ №1:
Маршрут в вашем файле routes.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
Ответ №2:
Вместо использования метода вы должны использовать action, а remote true запустит запрос ajax и предотвратит перенаправление. Затем создайте файл test.js.erb для обработки запроса ajax на обновление вашего DOM, который будет выполнен после вашего вызова action.
<%= button_to 'Send to Processing',test_processing_application_path(record_id),
action: :test, form_class: 'btn btn-danger', :remote=>true %>
Надеюсь, это поможет.
Приветствия.