Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ruby-on-rails-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 什么时候应该在Rails中嵌套模型声明?_Ruby On Rails_Ruby On Rails 3 - Fatal编程技术网

Ruby on rails 什么时候应该在Rails中嵌套模型声明?

Ruby on rails 什么时候应该在Rails中嵌套模型声明?,ruby-on-rails,ruby-on-rails-3,Ruby On Rails,Ruby On Rails 3,关于何时最好嵌套模型名称空间以及何时最好将它们全部保留在顶层,指导原则是什么 例如,当我有几个类都与一个核心类有关时(系统的大多数只处理该核心类),我的直觉告诉我将它们声明为: CoreModel CoreModel::DependentOne CoreModel::AnotherDependent 这几乎总是对应于HasyMul众多/属于关系(我几乎认为这是下一个关于配置的约定)。 同样,我的路线经常反映出这种嵌套: /CoreModels/:core\u model\u id/Depe

关于何时最好嵌套模型名称空间以及何时最好将它们全部保留在顶层,指导原则是什么

例如,当我有几个类都与一个核心类有关时(系统的大多数只处理该核心类),我的直觉告诉我将它们声明为:

CoreModel

CoreModel::DependentOne

CoreModel::AnotherDependent
<>这几乎总是对应于HasyMul众多/属于关系(我几乎认为这是下一个关于配置的约定)。 同样,我的路线经常反映出这种嵌套: /CoreModels/:core\u model\u id/DependentOne/:id

我觉得应该这样做的原因是,同一个大型应用程序的两个组件区域通常需要一个支持组件,该组件的名称与软件的其他区域类似(如果不相同的话)。我觉得这些依赖模型(它们的存在只是为了支持核心模型)是最好的选择

我很困惑,因为有些时候这样做会让事情变得更简单(比如只需要采用DependentOne模型并自动正确路由的link_),但其他项目(比如表单_)却无法正常工作(因为它没有正确的路由,如果我将CoreModel添加到表单中,因为它抱怨没有这样的路由core\u model\u core\u model\u dependent\u one等…)


也许我还不够清楚,所以我会确保在收到澄清请求时更新此信息。

…系统的大多数只处理该核心类…

那样的话,我就不用麻烦给它们命名了

我觉得我应该这样做的原因是,同一个大型应用程序的两个组件区域通常需要一个与软件其他区域名称相似(如果不是相同的话)的支持组件。我觉得将这些依赖模型(仅存在于支持该核心模型)的名称隔开是最好的方法。

宾果-如果你有名称冲突,名称空间是一个很好的解决方法。但是,你有这个问题吗

名称空间避免了名称冲突,但在Rails中,它也带来了一些麻烦和麻烦,并且(在整个应用程序中)输入了更多的内容。因此,对我来说,除非你真的有名称冲突,否则它是不值得的

考虑这样一个结构,有你的核心模型和许多帮助它的模型

#Core Models
Model
Supporter
Assister
Helper
Benefactor
在应用程序的大部分生命周期中,您可能永远不会遇到问题。如果您最终遇到了问题,您可以这样做:

AltModel
AltModel::Supporter    
OtherModel
OtherModel::Benefactor
或者,如果确实很简单,只需在类名前加前缀即可:

AltModelSupporter
OtherModelBenefactor
因此,用这种方式命名核心模型可能比“正确”命名它们更简单:

CoreModel
CoreSupporter
CoreAssister

因此,有很多方法可以满足您的需求,其中没有一种建议您在实际没有名称空间冲突的情况下,应该麻烦为应用程序的核心功能命名。考虑到您已经遇到的难题,我认为您会更乐意将应用程序的核心模型保留在顶级名称空间中,只嵌套alternate模型实际上在未来会有冲突。

感谢您的全面回复。我花了一些时间来消化,但我学到了很多。