导致遗留问题的路线轨道 5,不能破坏等

Posted

技术标签:

【中文标题】导致遗留问题的路线轨道 5,不能破坏等【英文标题】:Routes causing legacy issues rails 5, cannot destroy etc 【发布时间】:2021-07-29 18:32:41 【问题描述】:

这是我之前问题的延续:Put or patch for new update action Rails

这个问题的解决方案有效,但是,该解决方案导致遗留系统中的其他问题,我将展示主要的两个问题,但我不确定如何让系统和平运行,直到我可以去关于重构系统。

使用post :update,以下操作会中断,销毁任何东西,导入记录,如果我取消注释post :update 然后导入作品,编辑不会。

没有一个表单设置为使用 REST,我目前无法更改它,因为我现在正在尝试处理路由,然后移动到系统本身。

这里是一个路由的例子

resources :stock_groups, except: %i[destroy] do
   member do
    get :copy

    post :copy
    post :update # temp PATCH, PUT routes
  end

 collection do
   get :list
   get :import_stock_groups
   get :download_stock_groups_template

   post :preview_import_stock_groups
   post :process_import_stock_groups
 end
end

# remap wrong implmentation of paths
get '/stock_groups/edit/:id', to: redirect('/stock_groups/%id/edit')
get '/stock_groups/copy/:id', to: redirect('/stock_groups/%id/copy')
get '/stock_groups/show/:id', to: redirect('/stock_groups/%id')

这是我去导入记录时得到的 它针对控制器中的错误方法。

至于销毁它也失败了,我确实尝试添加类似 post :destroy 的东西,但这没有用。

任何帮助都会很棒。

【问题讨论】:

我没有足够的信息,但发生的错误是它认为您的路线的一部分是 stock_groups 显示路线的 ID。 ***.com/questions/50955294/… @JustinAuvil 我已经在使用一个集合,所以这应该可以工作,对吧? 【参考方案1】:

好吧,让我们讨论一下错误,它告诉您这里发生了什么。您正在尝试搜索 StockGroup.find(params[:id]) 应该是整数。因为 find 将按 id 值搜索您的记录。

StockGroup.find(params[:id]) # only integer allowed

但是在您的请求中,您发送id = process_import_stock_groups 这是不可能的,因为rails 约定您将拥有id 整数,除非您通过更改rails 约定在模型级别更改它。 所以要试运行rails c

StockGroup.find('process_import_stock_groups') # should not work but just try to know your error

现在你将这个值保存在process_import_stock_groups 中的哪一列,所以你的方法应该是

StockGroup.where(name_of_column: 'process_import_stock_groups').first

你得到了什么?希望能解决你的问题。

【讨论】:

我目前不打算更改任何代码,有很多技术债务,我只是在处理路线。所以我需要的解决方案是纯粹基于路由的。 好吧,但我没有建议任何改变!我是说你在搜索不存在的东西,所以你必须看看你是如何搜索记录的。 啊抱歉,这是我在 rails 控制台StockGroup Load (1.0ms) SELECT stock_groups.* FROM stock_groups 得到的,其中stock_groups.id = 0 LIMIT 1 ActiveRecord::RecordNotFound: 找不到来自/home/ben/.rbenv/versions/2.2.6/lib/ruby/gems/2.2.0/gems/activerecord-5.0.7.2/lib/active_record/core.rb:173的'id'=process_import_stock_groups的StockGroup:在find' 是的,这条消息也说你也一样!尝试rails dbconsole 并在提示符下运行select * from stock_groups limit 3; 并显示结果。

以上是关于导致遗留问题的路线轨道 5,不能破坏等的主要内容,如果未能解决你的问题,请参考以下文章

“没有路线匹配”:带有路由轨道命名空间的噩梦

如何在不破坏遗留代码的情况下增加函数的返回值?

已安装的轨道引擎中的命名路线

openharmony 军棋工兵寻径算法的实现

在网络浏览器中模拟 gps 位置路线

由于 tableView 的委托实现而导致的遗留单元格布局[关闭]