Ruby on rails RoR-添加与其他模型相关的内容

Ruby on rails RoR-添加与其他模型相关的内容,ruby-on-rails,ruby,ruby-on-rails-3,forms,routing,Ruby On Rails,Ruby,Ruby On Rails 3,Forms,Routing,因此,我有两个模型,每个模型有一个控制器: 模型项目有许多主题 模型主题属于项目 在我的routes文件中,我添加了资源:项目,也添加了主题。现在,我可以添加一个带有localhost/projects/new的项目,该项目运行良好,我可以添加带有localhost/Themes/new的主题。但这不是我想要的方式 我只想添加与项目相关的主题。最好的方法是什么?我试过这样的方法:match“projects/:project_id/themes/new”=>“themes#new”,:as=>“

因此,我有两个模型,每个模型有一个控制器:

模型项目有许多主题

模型主题属于项目

在我的routes文件中,我添加了
资源:项目
,也添加了主题。现在,我可以添加一个带有
localhost/projects/new
的项目,该项目运行良好,我可以添加带有
localhost/Themes/new
的主题。但这不是我想要的方式

我只想添加与项目相关的主题。最好的方法是什么?我试过这样的方法:
match“projects/:project_id/themes/new”=>“themes#new”,:as=>“themes”
,这似乎有效,但在提交我的新表单后,什么也没有发生。新表单将在没有错误消息或类似消息的情况下再次呈现。html中的my form标记呈现如下:

你知道哪里出了问题吗?有这样的最佳实践吗,因为我认为这是一个经常需要的模型。

您想使用吗


这种情况称为嵌套资源

在路线中定义:

resources :projects do
  resources :themes
end
它将准确地创建您描述的url,以及一系列帮助器方法。有关完整列表,请参见,但以下是一个示例:

要访问单个主题,您可以使用
projects\u-theme\u-path(@project,@theme)
,或者要查看项目的所有主题,您可以使用
projects\u-theme\u-path(@project)
。同样,请参阅rails指南以获得完整的解释和所有帮助


此外,您可以随时运行
rake routes
,查看为您的项目设置的确切助手方法。

您还应该检查是什么使得这些路由的建模和实现变得非常简单。

使用插件代替核心rails功能,这正是他想要的功能,这是过分的,对于不了解嵌套路由的初学者来说,这当然不是个好主意。在使用gem进行额外复杂的分层之前,了解rails核心是如何工作的是很重要的。我不同意。知道你的选择比不知道要好。我凭什么认为继承的资源超过了他的能力,或者对他特定的项目来说是过度的?我只是说他应该检查一下,而不是使用它。很公平,继承的资源是值得一看的,但作为一个评论而不是回答,传递一个旁注更合适。你是对的。我是StackOverflow的新手,所以我仍然掌握着窍门。看起来不错!另外,
rake routes
提示也是一个不错的补充。还有一件事:我添加了这个,效果很好。现在,在我的新操作中,
引发了一个错误,
没有路由匹配{:controller=>“themes”,:action=>“create”}
。我是否必须修改我的表单以便采取行动?您需要为[@project,@theme]do | f |使用
表单。您可能想观看这个railscast,了解更多关于嵌套资源如何工作的信息:没问题,享受rails带来的乐趣吧!
resources :projects do
  resources :themes
end