导致遗留问题的路线轨道 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,不能破坏等的主要内容,如果未能解决你的问题,请参考以下文章