所以每个控制器都有两个模型:
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">
答案 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,这使得建模和实施这些路线变得简单。