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

时间:2011-03-06 16:46:38

标签: ruby-on-rails ruby ruby-on-rails-3 forms routing

所以每个控制器都有两个模型:

Model Project has_many Themes

Model Theme belongs_to Project

在我的路线文件中,我添加了resources :projects以及主题。现在我可以使用localhost/projects/new添加一个工作正常的项目,我可以使用localhost/themes/new添加主题。但那不是我想要的方式。

我只想添加与项目相关的主题。什么是最好的方法呢?我试过这样的事情:match "projects/:project_id/themes/new" => 'themes#new', :as => 'themes'这似乎有效,但在提交我的新表格后没有任何反应。新表单再次呈现,没有错误消息或类似的东西。我在html中的表单标记呈现如下:

<form accept-charset="UTF-8" action="/projects/3/themes/new" class="new_theme" id="new_theme" method="post">

你知道出了什么问题吗?是否有类似的东西的最佳实践,因为我认为它是一个经常需要的模型。

3 个答案:

答案 0 :(得分:2)

您想使用nested resources

resources :projects do
  resources :themes
end

答案 1 :(得分:0)

这种情况称为嵌套资源。

在您的路线中定义:

resources :projects do
  resources :themes
end

它将创建您描述的网址,以及一堆帮助方法。有关完整列表,请参阅the rails guides,但这是一个示例:

要获得单个主题,您可以使用projects_theme_path(@project, @theme),或查看您将使用projects_themes_path(@project)的项目的所有主题。再次,请参阅导轨指南以获取完整说明和所有助手。

此外,您可以随时运行rake routes以查看为项目设置的EXACT帮助程序方法。

答案 2 :(得分:0)

您还应该查看https://github.com/josevalim/inherited_resources,这使得建模和实施这些路线变得简单。