我正在尝试从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
不存在,并且会导致问题。
如何仅使此按钮不重定向/呈现某些内容,而仅从当前所在页面调用该方法?请随时给我链接相关帖子,如果重复存在的问题,请关闭此帖子。
答案 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 %>
希望这会有所帮助。
干杯。