ruby-on-rails - 使用视图中的按钮触发操作时出错
问题描述
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
解决方案
您的问题,只是为了更深入地解释,是 routes.rb 中的路由是按顺序读取的。因此,当首先命中具有相同 URL 的路由时,它会与该路由一起使用,并且永远不会在文件中更进一步。因此,请确保文件中的路线顺序正确。
在您的情况下,它在 routes.rb 文件中的位置较高,这就是它查看错误路线的原因。
resources :lights
正如你所说,一旦你把它移到你的另一条路线下面,put 'lights/reset_node', to: 'lights#reset_node'
它就起作用了,因为现在它的顺序更高了。
推荐阅读
- javascript - 使用 puppeteer js 按标题查找元素
- json - Jinja 解析嵌套的 JSON
- google-app-maker - 如何将 Google App Maker 应用程序移动到自己的服务器?
- pytorch - 即使只启动了两个 GPU 进程,在多 GPU 机器上使用 pytorch Distributed Data Parallel 与 world_size 4 进行训练也会继续
- python - 如何创建python类以在init上创建对象
- flutter - 在构建期间调用的提供程序和flutter_bloc setState() 或markNeedsBuild()
- swift - UISwipeGestureRecognizer 没有在 UITextView 上调用函数
- amazon-web-services - 在 cloudformation 中使用 S3 目标进行代码管道部署
- python - 如何使 PYTHON 中的 try 函数只执行一次,而 except 执行多次?
- php - 从包含链接的文本文件的每一行中删除换行符并在 iframe 中显示这些链接