首页 > 解决方案 > 使用视图中的按钮触发操作时出错

问题描述

Rails 5.2

在我的 routes.rb 中,我有以下内容:

put 'lights/reset_node', to: 'lights#reset_node'

当我运行 rake 路线时,我得到:

lights_reset_node PUT    /lights/reset_node(.:format)  lights#reset_node

在lights_controller.rb 中,我有:

def reset_node #TODO 写方法结束

在我看来,我有以下几点:

= link_to lights_reset_node_path(:node => @node), :method => :put do
  button.btn.btn-secondary type="button"
    = t('device.show.reset_node_button')

但是,当我单击按钮时,我得到以下信息:

Unknown action
The action 'update' could not be found for LightsController

标签: ruby-on-railsruby-on-rails-5.2

解决方案


您的问题,只是为了更深入地解释,是 routes.rb 中的路由是按顺序读取的。因此,当首先命中具有相同 URL 的路由时,它会与该路由一起使用,并且永远不会在文件中更进一步。因此,请确保文件中的路线顺序正确。

在您的情况下,它在 routes.rb 文件中的位置较高,这就是它查看错误路线的原因。

resources :lights

正如你所说,一旦你把它移到你的另一条路线下面,put 'lights/reset_node', to: 'lights#reset_node'它就起作用了,因为现在它的顺序更高了。


推荐阅读