【问题标题】:Rails button call controller method and don't redirectRails 按钮调用控制器方法并且不重定向
【发布时间】:2019-04-05 15:00:33
【问题描述】:

我试图从 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 不存在并导致问题。

我怎样才能让这个按钮不重定向/渲染某些东西,而是简单地从它当前所在的页面调用方法?如果与现有问题重复,请随时链接我相关帖子或关闭此帖子。

【问题讨论】:

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


    【解决方案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,该请求将在您的操作调用之后执行。

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

      希望这会有所帮助。

      干杯。

      【讨论】:

      • 方法: :post 告诉按钮如何调用路由;没关系。
      猜你喜欢
      • 2017-05-13
      • 2015-06-02
      • 1970-01-01
      • 1970-01-01
      • 2016-10-11
      • 1970-01-01
      • 2018-06-18
      • 1970-01-01
      • 2023-03-05
      相关资源
      最近更新 更多