Rails路由具有多个模型ID

时间:2012-10-27 00:49:59

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

我有一个带有Item模型和Fixer模型的应用程序。每个物品都属于一个固定器,固定器可以有很多物品。我想创建一个“日志”页面,其中特定修复程序可以更新与其关联的特定项目的信息。理想情况下是这样的

www.myappname.com/fixers/<fixer_id>/log/<item_id>

我对Rails相当新,所以我不确定如何弄清楚这个路由/控制器。我查看了Rails指南中关于路由的部分,唯一看起来类似于我想要的是嵌套模型,但我理想情况下不想嵌套模型,因为虽然项目在技术上可能是“属于”修复者,但实际上并不是这样。在现实世界中的情况(固定器只是关联,并且belongs_to是最明智的方式),并且关系中没有其他部分需要/有意义的嵌套。更重要的是,我并没有真正了解模型的嵌套意味着什么,我试图避免实现我不完全理解的解决方案。

如果嵌套是要走的路,请告诉我,但除此之外,我该怎么做呢?我在我的routes.rb文件中试过这个:

match 'fixers/:id/log/:id' => 'fixers#log'

并创建了log.html.erb,但我不知道如何在控制器中选择它的参数(它如何知道我选择哪个“:id”?有更好的方法吗?这样做?

谢谢!

2 个答案:

答案 0 :(得分:3)

由于它们彼此关联,您可以尝试使用嵌套路由:

resources :fixers do
  resources :log
end

答案 1 :(得分:1)

嵌套资源用于一对多关系,您可以在Rails路由指南中阅读。

您可以按照自己认为合适的方式命名参数,但不一定是:id。例如:

match 'fixers/:id/log/:item_id' => 'fixers#log'

并在您的控制器中:

@fixer = Fixer.find(params[:id])
@item = Item.find(params[:item_id])