gpt4 book ai didi

ruby-on-rails - Rails Active Record 多态嵌套资源导航

转载 作者:行者123 更新时间:2023-12-04 06:20:50 25 4
gpt4 key购买 nike

我遇到了一些问题,不知道如何解决。

我们的数据模型中有许多多态嵌套资源,例如:

目的地 > 住宿 > 地址

目的地 > 景点 > 地址

所以有可能从多个父节点到达地址 Controller 。我需要能够正确地关联这些并导航回父树。

在这些情况下地址是相同的模型,所以我的第一个解决方案
这是为了在路由文件中创建嵌套资源。
然后我们也开始使用这个嵌套来提供面包屑
导航的东西,所以当我们的 URL 变成这样时:

本地主机:3000/destinations/1/accommodations/3/address/new

我们可以将其拆分并使用它来导航回任何级别的路径。

我也使 Controller 通用,我使用嵌套资源
找出 map 的父资源是什么,以便 Controller 看起来
像这样:

def new
@parent = find_parent_model

if !@parent.nil?
@destination = @parent.destinations.new

[...]
def find_parent
params.each do |name, value|
if name =~ /(.+)_id$/
return $1.classify.constantize.find(value)
end
end
nil
end

这有效。但问题是我们在 routes.rb 文件中有 1800 行嵌套资源,现在 Rails 应用程序需要大约 5 分钟才能启动,并且它位于
那里使用 500MB 的内存。 :S

有谁知道这样做的不那么疯狂的方式?

最佳答案

您可能希望放弃使用嵌套资源语法进行路由。

一个单一的路线像

get 'destinations/:destination_id/:parent_type/:parent_id/address/new' => 'address#new'

将匹配所有资源,并且在 AddressController#new你可以有
@parent = params[:parent_type].constantize.find(params[:parent_id])

您可能还想检查 @parent是之后预期的类型之一。

关于ruby-on-rails - Rails Active Record 多态嵌套资源导航,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6595350/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com