Rails按钮调用控制器方法并且不重定向

时间:2019-04-05 15:00:34

标签: ruby-on-rails ruby erb rails-routing

我正在尝试从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 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

您应该使用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 %>

希望这会有所帮助。

干杯。